私は別のフォームにデータテーブルをコピーしたいと思います。あるフォームから別のフォームにデータテーブルを渡す
のForm1.cs
にForm2.cs
Form1 m = new Form1();
dtSessionst = m.Data1.Copy();
public DataTable Data1
{
get { return dtDetailsAll; }
}
しかし、それは値をコピーしません。あなたは私を助けてくれますか?
私は別のフォームにデータテーブルをコピーしたいと思います。あるフォームから別のフォームにデータテーブルを渡す
のForm1.cs
にForm2.cs
Form1 m = new Form1();
dtSessionst = m.Data1.Copy();
public DataTable Data1
{
get { return dtDetailsAll; }
}
しかし、それは値をコピーしません。あなたは私を助けてくれますか?
Form1
のインスタンスがForm2.cs
に間違っています。キーワードnew
使用:
Form1 m = new Form1();
をフルDataTable Data1
が存在するものとは異なる新しいインスタンスを作成します。
解決策:適切なインスタンスをForm2
に渡す必要があります。今、あなたがData1
にアクセスするには、この変数を使用することができます)
private Form1 frm1;
public Form2(Form1 f1)
{
frm1 = f1;
InitializeComponent();
}
3:
1)クラスのフィールドに保存します)パラメータ
2としてForm1
を取ることができForm2
における第二のコンストラクタを作成します:
dtSessionst = frm1.Data1.Copy();
私はこれをしましたが、empryフォームが現れ、コントロールが初期化されていません。両方のコンストラクタにはInitializeComponent()が必要です。 ? –
私は昨日あなたのコメントを読んでいます。パラメータのない元のコンストラクタを保持して、「2番目の」コンストラクタを作成することが重要です。はい、両方のコンストラクタに 'InitializeComponent()'コールが必要です。そうしないと、フォームにコントロールがありません。 'public Form2(Form1 f1):this(){...}'このようにして、あなたが使うコンストラクタに関係なく、 'InitializeComponent'呼び出しが行われます。このようにして、2番目のコンストラクタから元のコンストラクタを呼び出すことができます。 –
Form1の新しい(空の)インスタンスを作成してそこからデータを取得していますが、最初に開いたときにそこにデータがありますか?これはうまくいかないので動作しないからです。フォーム2のデータが必要な場合は、フォーム2のパラメータとして渡してください。 – EpicKip
@EpicKip答えとして書いてください。 –
form1からform2を開きますか?あなたがそれを開いたときにform1に既に存在するデータがありますか? – EpicKip