2010-01-11 4 views
0

단일 테이블 백엔드에 바인딩 된 작은 Windows 클라이언트 응용 프로그램 데이터가 있습니다. VS 2005의 마법사를 사용하여 DataSet을 만들고 기본 어댑터와 GridView를 자동으로 만듭니다. 또한 RichText 컨트롤이 있고이 DataSet에 바인딩되어 있습니다. 지금까지는 모든 것이 있지만 RichTextbox에 데이터가 표시되기 전에 특정 문자 (~)를 즉시 대체해야합니다. 이 작업을 수행 할 수 있습니까?서식있는 텍스트 상자. .NET 2.0 콘텐츠 형식화

답변

0

당신은 바인딩의 FormatParse 이벤트를 처리해야합니다.

Binding richTextBoxBinding = richTextBox.DataBindings.Add("Text", bindingSource, "TheTextColumnFromTheDatabase"); 
richTextBoxBinding.Format += richTextBoxBinding_Format; 
richTextBoxBinding.Parse += richTextBoxBinding_Parse; 

Format 경우, 포맷 된 표현으로 내부 값을 변환 :

private void richTextBoxBinding_Format(object sender, ConvertEventArgs e) 
{ 
    if (e.DesiredType != typeof(string)) 
     return; // this conversion only makes sense for strings 

    if (e.Value != null) 
     e.Value = e.Value.ToString().Replace("~", "whatever"); 
} 

Parse 경우, 내부 값 형식의 표현을 변환 :

private void richTextBoxBinding_Parse(object sender, ConvertEventArgs e) 
{ 
    if (e.DesiredType != typeof(string)) 
     return; // this conversion only makes sense for strings (or maybe not, depending on your needs...) 

    if (e.Value != null) 
     e.Value = e.Value.ToString().Replace("whatever", "~"); 
} 

주 바인딩이 양방향 인 경우에만 Parse 이벤트를 처리하면됩니다 (예 : 사용자가 텍스트와 채널을 수정할 수 있음). 데이터베이스에 저장 됨)

+0

토마스, 답변 해 주셔서 감사합니다. 나는 같은 줄에서하고 있었고 우연히 "richTextBox1_TextChanged"에서이 이벤트를 발견했고이 이벤트에서 "richTextBox1.Text = richTextBox1.Text.Replace ("~ ","\ n ");"코드를 추가했습니다. 또한 사용자가 TextEvent_Changes 이벤트를 발생시켜 텍스트를 변경할 수 없도록 컨트롤을 읽기 전용으로 만들었습니다. 이 접근 방식이 좋고/나아 졌거나 나쁘다고 생각하십니까? 입력 해 주셔서 다시 한 번 감사드립니다. Ranjit – Ranjit

+0

바인딩을 통해 데이터 소스를 업데이트하기 때문에 Text 속성을 명시 적으로 변경해서는 안됩니다. 서식 및 구문 분석 이벤트는 수행하려는 작업에 맞게 디자인되었습니다 –

관련 문제