0

2 つのフォーム (Form1、Form2) があり、それぞれに修飾子Publicと 1 つのボタンを持つ 1 つのdatagridviewがあります。ボタンに書かれたコードは次のとおりです。

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;

問題

Form1のボタンを押すとForm2 が表示されますが、 Form1 の datagridview1 の値はForm2 のdatagridview1 に表示されませんが、 Form2 のdatagridview1の値をプログラムでチェックすると、値はそこにあります。

試した解決策

  1. datagridview1.Refresh(); - Form2 のコントロールを更新しようとしましたが、変更が見られませんでした。
  2. f.Refresh(); - Form2全体を更新しようとしましたが、それでも変更は見られませんでした

注:- f.datagridview1 = datagridview1;と書く代わりに i を知っています。datagridview を設定するループを作成できますが、上記のコードの問題を知る必要があります。

前もって感謝します

4

2 に答える 2

1

dataGridView への参照をオーバーライドしないでください (つまり、Form2 から f.dataGridView1 にアクセスしたとしても、Form1 から dataGridView にアクセスすることになります)。代わりに、両方の dataGridViews の DataSource を同じオブジェクトに設定します。

したがって、コードに次の行を追加すると、コードのエラーが表示されます。

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;
f.datagridview1.DataSource = null;

datagridview1ANDf.datagridview1が Form1 の同じ datagridview を指すため、Form1 の datagridview が突然空になることがわかります。また、From2 から datagridview にアクセスできなくなりました (少なくともそれほど簡単ではありません)。

代わりにこれを試してみてください:

f.datagridview1.DataSource = datagridview1.DataSource

このコードは、両方の DataSources (実際のデータを含む) を両方の datagridviews の同じオブジェクトに設定するだけです。

この説明がある程度理解できることを願っています:)

于 2016-10-24T11:21:41.873 に答える
0

BindingSource オブジェクトで ResetBindings を使用できます。そのように:

//could be simpler assignment, but to give you a view on what is going on
BindingSource source = new BindingSource();
source.DataSource = f.datagridview1.DataSource;
source.ResetBindings(false);

それがうまくいくかどうか教えてください

于 2016-10-24T11:21:36.320 に答える