0

私が持っている最初のフォームで:

var dsUni = new DataSet();
dsUni.ReadXml(pathDesc);
frm02.dgv02.DataSource = dsUni.Tables[0];
frm02.ShowDialog();
dsUni.WriteXml(pathDesc); //this line is in the frm02.ClosingEvent

したがって、secondForm では、変更された dgv02 から writeXml に同じ DataSet(dsUni) が必要です。
しかし、エラーが発生しました:
The name 'dsUni' does not exist in the current context
この場合の解決策を教えてください。

4

2 に答える 2

1

dsUniエラーは、2 番目のフォームに定義済みという名前の変数がないことを示しています。var dsUni = new DataSet();最初のフォームで行ったように、定義する必要があります。行を介してデータ自体を渡しましたが、frm02.dgv02.DataSource = dsUni.Tables[0];という名前の変数dsUniは form1 に対してローカルであるため、form2 はそれを知りません。name でそのデータセットにアクセスしたい場合はdsUni、それを公開して form2 が直接アクセスできるようにするか、form2 でその名前で新しいローカル変数を作成し、目的のデータをロードする必要があります (ポインターを使用するだけでない限り、非常に非効率的です) form1 の dsUni に戻ります)。

form2 に という新しい変数を作成する場合はdsUni、必要なデータをロードすることを忘れないでください。最初は空です。

于 2012-06-11T21:26:02.633 に答える
1

これをしないでください。ただそれを求めているだけです。

膨大な量の技術的負債が発生するのを待っています。

より良い方法はいくつかありますが、これを基に構築できます。

小さなクラスを作成します。

public class MyData()
{
   public Dataset MyDataset {get; private set;}

   // add constructor and all methods related to the dataset here. 
}

次に、Form1 で作成し、必要な処理を行って、それをプロパティまたはコンストラクターで form2 に渡します。

それが一般的であり、完全に自明ではない場合は、一般的なものを作成し、それに関連するすべてのメソッドをそこに配置してから使用します。Form2 は Form1 の操作に依存して開始するとすぐに、エネルギーを節約し、左の鼻孔にビロをできるだけ強く詰め込むことができます。頭痛は似ています。

インターフェースは改善されますが、それは次のレッスンです。

于 2012-06-11T21:32:26.773 に答える