2017-08-07 8 views
1

私は別のフォームにデータテーブルをコピーしたいと思います。あるフォームから別のフォームにデータテーブルを渡す

のForm1.cs

にForm2.cs

Form1 m = new Form1(); 
dtSessionst = m.Data1.Copy(); 

public DataTable Data1 
{ 
    get { return dtDetailsAll; } 
} 

しかし、それは値をコピーしません。あなたは私を助けてくれますか?

+0

Form1の新しい(空の)インスタンスを作成してそこからデータを取得していますが、最初に開いたときにそこにデータがありますか?これはうまくいかないので動作しないからです。フォーム2のデータが必要な場合は、フォーム2のパラメータとして渡してください。 – EpicKip

+0

@EpicKip答えとして書いてください。 –

+0

form1からform2を開きますか?あなたがそれを開いたときにform1に既に存在するデータがありますか? – EpicKip

答えて

0

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(); 
+0

私はこれをしましたが、empryフォームが現れ、コントロールが初期化されていません。両方のコンストラクタにはInitializeComponent()が必要です。 ? –

+0

私は昨日あなたのコメントを読んでいます。パラメータのない元のコンストラクタを保持して、「2番目の」コンストラクタを作成することが重要です。はい、両方のコンストラクタに 'InitializeComponent()'コールが必要です。そうしないと、フォームにコントロールがありません。 'public Form2(Form1 f1):this(){...}'このようにして、あなたが使うコンストラクタに関係なく、 'InitializeComponent'呼び出しが行われます。このようにして、2番目のコンストラクタから元のコンストラクタを呼び出すことができます。 –

関連する問題