Текстовое поле привязки данных не может выйти - PullRequest
4 голосов
/ 07 января 2011

У меня та же проблема, что и в этом посте .Это вызвано числовым значением nullable моего объекта набора данных.Когда свойство этого объекта имеет начальное значение null, я могу выйти из своего текстового поля.Когда мое текстовое поле имеет начальное числовое значение и очищает текстовое поле, я не могу выйти.

Я хочу иметь возможность ввести нулевое значение, очистив текстовое поле.Я знаю, что это проблема проверки, когда для свойства «CausesValidating» установлено значение false, я могу выйти.Также моя функция установки свойств никогда не достигается.

Есть идеи или предложения?Большое спасибо заранее!

1 Ответ

4 голосов
/ 08 февраля 2011

(Извините, поначалу я не видел, чтобы ваш ответ спрашивал о более простом способе, чем ручное присоединение к событиям Format / Parse, поэтому мой ответ, вероятно, не удовлетворяет достаточно, но для других людей, имеющих такую ​​же проблему,фрагмент кода может быть полезен.)

Вы можете использовать событие Format и Parse Binding этого TextBox для преобразования пустой строки в DBNull.Value и обратно, так что элемент управления является действительным ивы можете оставить его.

// Call AllowEmptyValueForTextbox() for each TextBox during initialization.

void AllowEmptyValueForTextBox(TextBox textBox)
{
    if (textBox.DataBindings["Text"] != null)
    {
        textBox.DataBindings["Text"].Format += OnTextBoxBindingFormat;
        textBox.DataBindings["Text"].Parse += OnTextBoxBindingParse;
    }
}

void OnTextBoxBindingParse(object sender, ConvertEventArgs e)
{
    // Convert the value from the textbox to a value in the dataset.
    string value = Convert.ToString(e.Value);
    if (String.IsNullOrEmpty(value))
    {
        e.Value = DBNull.Value;
    }
}

void OnTextBoxBindingFormat(object sender, ConvertEventArgs e)
{
    // Convert the value from the dataset to a value in the textbox.
    if (e.Value == DBNull.Value)
    {
        e.Value = String.Empty;
    }
}

Вместо того, чтобы показывать пользователю пустое текстовое поле, когда поле в наборе данных пустое, вы можете использовать тот же механизм, чтобы заполнить текстовое поле строкой типа "(не задано)" или так.В методе Format конвертируйте DBNull.Value в «(не установлено)», а в методе Parse конвертируйте его обратно.

См. Также: http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.parse

...