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 に答える