0

我遇到了以下情况:

    try
    {
        Validate();
        myBindingSource.MoveNext();
    }
    catch
    {
        if (MessageBox.Show("Do you want to keep editing the record?", "Error",
            MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)
        {
            myBindingSource.CancelEdit();
        }                
    }

其中 myBindingSource.Datasource 是一个 DataTable,数据绑定文本框在验证时更新。

我将当前记录的数据绑定文本框更改为无效状态(例如重复主键)。当我调用上面的代码片段时,自然会引发异常。

在 catch 块中,数据表行的字段值已恢复为其原始值,但文本框值保持不变(我想要相同的文本框值)。

如果我再次调用相同的代码段,则不会引发异常(DataTable 具有正确的值)。

我的问题是如何使文本框再次将其数据发送到 DataTable?

PS 如果在第一次调用代码片段后更改文本框的值,DataSet 会收到更改。

4

1 回答 1

0

我的最终解决方案如下(尽管它将所有数据绑定控件写回数据源。至少它使数据源和控件保持同步):

try
{
    Validate();
    myBindingSource.MoveNext();
}
catch
{
    if (MessageBox.Show("Do you want to keep editing the record?", "Error",
        MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)
    {
        myBindingSource.CancelEdit();
    }
    else
    {
        foreach (Binding b in myBindingSource.CurrencyManager.Bindings)
                {
                    b.WriteValue();
                }
    }                
}
于 2012-12-05T22:13:40.927 回答