数据绑定的文本框无法退出。

4
我遇到了与该帖子相同的问题。这是由于我的数据集对象中存在一个可空的数字值所致。当该对象的属性具有null的初始值时,我可以退出文本框。当我的文本框具有初始数字值并清除文本框时,我无法退出。
我希望能够通过清除文本框来提供null值。我知道这是一个验证问题,当将“CausesValidating”属性设置为false时,我可以退出。此外,我的属性设置函数从未被触发。
有什么想法或建议吗?非常感谢!

可能是重复的问题:数据绑定的文本框:无法退出 - Neil Knight
人们已经投票将此问题作为您链接到的问题的完全重复项关闭。您能否解释一下您的问题有何不同,以及为什么其他问题的答案在您的情况下没有起作用? - Cody Gray
CausesValidation被设置为true,因为这是我想要的(我需要检查一个整数范围)- AutoValidate被设置为EnablePreventFocusChange,这在真正的错误上是正确的。最后一段指向了正确的方向,但我应该期望行为始终相同。我现在手动添加了格式和解析事件到Binding类,但我不希望为每个可空字段都这样做。一定有简单的方法吧? - eiri
我有同样的问题。我理解无法退出文本框的修复方法,但我想能够将数据绑定值设置回NULL。它最初是空的,但一旦它有了一个值,就好像它永远不能回到空(尽管数据库允许)。 - Todd Williamson
1个回答

4
< p > (很抱歉,起初我没有看到你的答复要求比手动附加到格式/解析事件更简单的方法,所以我的答案可能不够满意,但对于其他遇到同样问题的人来说,这段代码可能会有用。)

您可以使用该文本框的绑定的格式化和解析事件来将空字符串转换为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;
    }
}

当数据集中的字段为空时,您可以使用相同的机制将文本框填充为类似“(not set)”的字符串,而不是向用户显示空文本框。在格式方法中,将DBNull.Value转换为“(not set)”,在解析方法中将其转换回去。

另请参阅: http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.parse


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接