数据绑定文本框无法退出

时间:2011-01-07 16:52:51

标签: .net winforms data-binding textbox

我遇到与this post相同的问题。它导致bij成为我的数据集对象的数字可空值。当此对象的属性初始值为null时,我可以退出文本框。当我的文本框具有初始数值并清除文本框时,我无法退出。

我希望能够通过清除文本框来提供空值。我知道这是一个验证问题,当将“CausesValidating”属性设置为false时,我可以退出。此外,我的房产设置功能永远不会到达。

有任何想法或建议吗?非常感谢提前!

1 个答案:

答案 0 :(得分:4)

(对不起,起初我没有看到你的回复要求比手动附加到格式/解析事件更简单的方法,所以我的回答可能不够令人满意,但对于其他有相同问题的人,代码段可能很有用。)

您可以使用该TextBox的Binding的Format和Parse事件将空字符串转换为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