BindingSource.MoveNext 引发的异常 取消数据源上已编辑的值



>我遇到了以下情况:

    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 是一个数据表,数据绑定文本框在验证时更新。

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

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

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

我的问题是我如何制作文本框以将其数据再次发送到数据表?

附言:如果在第一次调用代码片段后更改文本框的值,则数据集将接收更改。

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

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();
                }
    }                
}

最新更新