我正在寻找一种方法来显示MaskedTextBox中的其他数据,而不是绑定到的数据(DataTable)。
更具体地说:DataTable包含DateTime列(DateOfBirth)。每当年份是1900年时,我想在MaskedTextBox中将其显示为空,同时将其保存在基础DataTable中,因为我使用1900表示“未知”。
示例:DataTable中的值:1900-10-09 - [DataBinding] - > MaskedTextBox _ _- 10-09
目前,我正在使用BindingSource的CurrentItemChanged-Event来修改MaskedTextBox的Text-property。只要我浏览DataTable,那就很好用了。但是,一旦我开始编辑MaskedTextBox,1900就会回来。
如果我能以某种方式拦截从DataRow传递给MaskedTextBox的值,而不是之后替换它,那会更好。
或许有一种方法可以让MaskedTextBox显示1900为空?
答案 0 :(得分:1)
为了完整性:Solution at codeproject
您是否尝试过Binding :: Format和Binding :: Parse? http://msdn.microsoft.com/en-US/library/system.windows.forms.binding_members(v=vs.80).aspx
答案 1 :(得分:1)
正如Catalin指出的那样,使用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);
}
}
}
答案 2 :(得分:0)
我认为你需要一个ValueConverter。创建一个类派生形式IValueConverter并在绑定中使用它。