1

別のクラスから行を追加/削除/編集するためにDataSetアクセスする方法TablesData

私は持っていてWinForm、私は追加しました

  • DataGridView dataGridView1
  • DataSet dataSet1
  • それらをバインドしますBindingSource

すべてのデータは XML に保存されます

すべて正常に動作します。いくつかのテスト プロジェクトを作成しましたが、すべて正常に動作します

DataGridViewしかし、別のクラスからデータ行を追加する可能性をテストしようとすると、 !!!!に変更が表示されません

だから私は持っていForm1dataGridView1dataSet1両方ともpublic

私が行った他のクラス内で

var esf = new Form1();
           
DataRow pl = esf.dataSet1.Tables["MyItems"].NewRow();

pl["Type"]  = type;
pl["Name"] = true;

esf.dataSet1.Tables["MyItems"].Rows.Add(pl);

そして、私が追加すると

esf.dataSet1.WriteXml(esf.XmlSettingsFile);

ファイルが正しく保存されます。

しかし、それは他のデータを上書きします

フォーム内の元のデータと同じものを使用しているように感じますが、メイン フォームDataSet内の元のデータにアクセスする必要がありますDataSet

dataSet1aspublic staticにアクセスして編集データを追加できるようにする必要がありますが、そうすると Visual Studio でエラーが発生します。フォームのビジュアル ビューで!?!

助言がありますか

4

1 に答える 1

3

私が正しく理解していれば...

  1. プロジェクトなどを開始し、DataGridView を持つ Form1 を使用します。
  2. 次に、最初のコード セットを別のクラスで実行し、新しいデータを追加します。
  3. XML を書き出すと、新しいものだけが得られ、Form1 の元のものは失われますか?

もしそうなら、何が起こっているのかは明らかです...

  1. Form1 オブジェクトを作成するプロジェクトを開始します。
  2. Form1で行っていることは何でもして、DataGridViewを埋めます
  3. コードの最初のブロックを実行すると、var esf = new Form1(); 行は Form1 の新しいインスタンスを作成します。これは、データを取得しようとしている元のインスタンスとは異なります。
  4. 他のクラスのコードは、新しくインスタンス化された Form1 で動作しているだけであり、アクセスしようとしているものとは異なります。

明らかにあなたのコードを見ることができないので、私の仮定は間違っているかもしれませんが、これが役立つことを願っています.

編集 - 問題を解決するには...

繰り返しますが、既存のコードがどのように見えるかについては推測することしかできませんが、次のようなことができます。

Form2 (または他のフォームが何であれ) から値にアクセスしようとする代わりに、最初から Form1 にアクセスできるように Form2 を設定します。

  1. Form2 にパブリック プロパティ "DataSet" などを指定します。
  2. Form2 (おそらく Form1 から) をインスタンス化するときは、単純に次のようにします。

    Form2 reliantForm = new Form2();

    relaintForm.DataSet = this.dataSet1;

    reliantForm.Show();

  3. Form2 はデータセットへの参照を持ち、必要に応じて操作できます。

于 2010-08-31T13:19:34.380 に答える