2012-01-29 60 views
0

我正在尋找一種方法來顯示MaskedTextBox中的其他數據,而不是綁定到的數據(DataTable)。數據綁定期間在MaskedTextBox中自定義格式或變換數據

更具體地說:DataTable包含一個DateTime列(DateOfBirth)。無論何時1900年,我都希望在MaskedTextBox中將其顯示爲空,同時將其保留在基礎DataTable中,因爲我使用1900作爲「未知」。

示例:值DataTable中:1900年10月9日 - [數據綁定] - > MaskedTextBox中_ _-10-09

目前,我使用的BindingSource的CurrentItemChanged-事件,修改MaskedTextBox的Text-property。只要我簡單地瀏覽DataTable就可以很好地工作。但是,一旦我開始編輯MaskedTextBox,1900就回來了。

如果我能以某種方式攔截從DataRow傳遞到MaskedTextBox的值,而不是在之後替換它,那將會更好。

或者也許有一種方法可以讓MaskedTextBox將1900顯示爲空?

+0

僅供參考,請參閱http://meta.stackexchange.com/questions/2950/should-hi-謝謝 - 標語和 - 致謝 - 從帖子中刪除 – 2012-01-29 20:32:50

+0

對不起,約翰,我不知道這一點。 – 2012-02-03 20:28:59

+0

沒有理由爲你不知道的事道歉。 – 2012-02-03 20:56:34

回答

0

我認爲你需要一個ValueConverter。創建一個派生於IValueConverter的類並在綁定中使用它。

+0

我想你正在使用wpf。告訴我,如果我錯了,我會刪除這個帖子。 – 2012-01-29 20:49:52

+0

嗨,謝謝你的回覆!我正在使用WindowsForms - ValueConverter是否不適用於WindowsForms? – 2012-01-30 19:23:15

+0

我認爲ValueConverter只適用於wpf。讓我知道你是否找到類似的東西。 – 2012-01-30 20:57:05

1

由於克特林指出,使用Binding.Format事件的伎倆:

Binding mtbGebdatBinding = mtbGebdat.DataBindings.Add("Text", _bsPerson, (string)mtbGebdat.Tag, true); 
mtbGebdatBinding.Format += new ConvertEventHandler(mtbGebdatBinding_Format); 
void mtbGebdatBinding_Format(object sender, ConvertEventArgs e) 
{ 
    if (DBNull.Value != e.Value) 
    { 
     string date = String.Format("{0:dd/MM/yyyy}", (DateTime)e.Value); 
     if (date.Substring(6, 4) == "1900") 
     { 
      e.Value = date.Substring(0, 6); 
     } 
    } 
}