0

バインドされているデータ(DataTable)以外のデータをMaskedTextBoxに表示する方法を探しています。

具体的には、DataTableにはDateTime列(DateOfBirth)が含まれています。年が1900の場合は常に、「不明」に1900を使用しているため、基になるDataTableに保持したまま、MaskedTextBoxに空として表示したいと思います。

例:DataTableの値:1900-10-09-[DataBinding]-> MaskedTextBox _ _-10-09

現在、BindingSourceのCurrentItemChanged-Eventを使用して、MaskedTextBoxのTextプロパティを変更しています。これは、DataTableを参照するだけでうまく機能します。ただし、MaskedTextBoxの編集を開始するとすぐに、1900が戻ってきます。

後で置き換えるのではなく、DataRowからMaskedTextBoxに渡される値を何らかの方法でインターセプトできればもっと良いでしょう。

または、MaskedTextBoxに1900を空として表示させる方法はありますか?

4

3 に答える 3

1

完全を期すために:codeprojectでのソリューション

Binding::FormatとBinding::Parseを試しましたか?http://msdn.microsoft.com/en-US/library/system.windows.forms.binding_members(v=vs.80).aspx

于 2012-02-02T10:14:17.907 に答える
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);
        }
    }
}
于 2012-02-03T20:34:02.040 に答える
0

ValueConverterが必要だと思います。IValueConverterから派生したクラスを作成し、バインディングで使用します。

于 2012-01-29T20:11:01.323 に答える