問題。フォーム自体の多数のテキストボックスのフォームのプロパティ内のフィールドにデータバインディングがあります。プロパティ内のフィールド値だけでなく、プロパティ全体を変更しています(以前に保存したデフォルトにリセットします)。
私がやりたかったのは次のようなものでした。
((CurrencyManager)BindingContext[Row]).Refresh();
動作せず、でBindingContext[Row]
あり、ではPropertyManager
なくCurrencyManager
、refreshメソッドがありません。 PushData()
保護されており、アクセスできません。私も呼び出してみthis.Refresh()
ました、そして私が呼び出してみた各コントロールで個別にc.Refresh
...今何ですか?
現在使用しているコードは次のとおりです。
private void btnReset_ButtonClicked(object sender, EventArgs e)
{
Row = ResetRow.Clone();//use clone to break the reference, dont want to be updating the ResetRow when Row fields change.
foreach (Control c in pnlBody.Controls)
if (c.DataBindings.Count > 0)
c.DataBindings.Clear();
DataBindandSet();//re-apply all the databindings (50)
}
//just a sample of the databinding function itself
private void DataBindandSet()
{
txtAzimuth.DataBindings.Add(new NullableBinding("Text", Row, "Azimuth", true));
txtBHTemp.DataBindings.Add(new NullableBinding("Text", Row, "BHTemp", true));
//repeat 48 more times
}
更新 データバインディングを完全なデータバインディング文字列に設定しました。null値のデフォルトを設定しても効果があるかどうかを確認しましたが、効果はありませんでした。
txtAzimuth.DataBindings.Add(new NullableBinding("Text", Row, "Azimuth", true, DataSourceUpdateMode.OnPropertyChanged, ""));
Row
フォーム自体の公共財産です。 ResetRow
フォームのプライベートプロパティであり、フォームロードの最初の行のクローンに割り当てられ、変更されることはありません。バックアップとして機能します。 一部のプロパティ(すべてではない)の値はnullであることが許可されており、空の文字列として表示される必要があります。これは、NullableBindingクラスが舞台裏で行うことです
データバインディングをすべて削除して再適用するよりも、これを行うためのより良い方法を誰かが考えることができますか?