пользовательский формат или преобразование данных в MaskedTextBox во время привязки данных - PullRequest
0 голосов
/ 29 января 2012

Я ищу способ отображения других данных в MaskedTextBox, кроме данных, с которыми он связан (DataTable).

Более конкретно: DataTable содержит столбец DateTime (DateOfBirth). Всякий раз, когда наступает 1900 год, я хотел бы отображать его как пустой в MaskedTextBox, сохраняя его в базовом DataTable, потому что я использую 1900 как «неизвестный».

Пример: значение в DataTable: 1900-10-09 - [DataBinding] -> MaskedTextBox _ _- 10-09

В настоящее время я использую CurrentItemChanged-Event объекта BindingSource для изменения свойства Text элемента MaskedTextBox. Это хорошо работает, пока я просто просматриваю DataTable. Однако, как только я начинаю редактировать MaskedTextBox, 1900 возвращается.

Было бы лучше, если бы я мог как-то перехватить значение, которое передается из DataRow в MaskedTextBox, вместо того, чтобы потом заменить его.

Или, может быть, есть способ заставить MaskedTextBox отображать 1900 как пустое?

Ответы [ 3 ]

1 голос
/ 02 февраля 2012
1 голос
/ 04 февраля 2012

Как указал Каталин, с помощью события 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);
        }
    }
}
0 голосов
/ 30 января 2012

Я думаю, что вам нужен ValueConverter. Создайте производную от класса форму IValueConverter и используйте ее в привязке.

...