teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2021/04/11 02:49

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,64 @@
2
2
 
3
3
  ~~ADataGridView~~ Form2 に DataTable を引数に持つコンストラクタを追加し、メインのフォームで生成した DataTable への参照をメインのフォームで ~~new ADataGridView(table)~~ new Form2(table)のようにして渡せばよいのでは? (← 「別のフォーム」は Form2 と言うことだそうなので訂正)
4
4
 
5
- DataTable への参照を渡してもらえればそれを DataGridView に表示するというコードを書くのは質問者さんは問題なくできるですよね?
5
+ DataTable への参照を渡してもらえればそれを DataGridView に表示するというコードを書くのは質問者さんは問題なくできるですよね?
6
+
7
+ **【追記】**
8
+
9
+ 下の 2021/04/11 10:47 の私のコメントで「レスは回答欄に追記します」と書いた件です。
10
+
11
+ > メインのフォームで、new Form2(table)のようにして渡しての部分ですが、例えばメインのフォームでForm2 form2=new Form2(table);として、そこからどうやって(Form2の)DataGridViewに表示するんでしょうか?変数form2を使うんですよね?
12
+
13
+ そのレスからは DataTable の作り方も分かってないような気がしますがそこはちょっと置いといて、メインのフォームで DataTable は作成済みというところから話をします。
14
+
15
+ (1) Visual Studio のソリューションエクスプローラーでプロジェクト名のノードを右クリックして新しい Form をプロジェクトに追加。以下、それを Form2 とします。
16
+
17
+ (2) From2 のデザイン画面でツールボックスから BindingSource と DataGridView をフォームにドラッグ&ドロップする。次に、Form2 のプロパティを表示し、Load イベントのハンドラを生成。
18
+
19
+ (3) Form2 のコードを表示し、DataTable フィールドと DataTable を引数に持つコンストラクタを追加。上記 (2) で生成された Form2.Load イベントのハンドラ内で DataGridView にコンストラクタで受け取った DataTable をバインドするコードを書く。以下のような感じ。
20
+
21
+ ```
22
+ using System;
23
+ using System.Data;
24
+ using System.Windows.Forms;
25
+
26
+ namespace WinFormsApp1
27
+ {
28
+ public partial class Form2 : Form
29
+ {
30
+ public Form2()
31
+ {
32
+ InitializeComponent();
33
+ }
34
+
35
+ DataTable _table;
36
+
37
+ public Form2(DataTable table)
38
+ {
39
+ InitializeComponent();
40
+
41
+ this._table = table;
42
+ this.dataGridView1.DataSource = this.bindingSource1;
43
+ }
44
+
45
+ private void Form2_Load(object sender, EventArgs e)
46
+ {
47
+ this.bindingSource1.DataSource = this._table;
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ (4) メインフォームでは、例えば Button クリックのイベントハンドラなどで、以下のようにメインフォームで作成した DataTable への参照を渡して Form2 を表示してやれば、コンストラクタ経由で渡した DataTable の内容が Form2 の DataGridView に表示されるはずです。
54
+
55
+ ```
56
+ private void button1_Click(object sender, EventArgs e
57
+ {
58
+ var table = new DataTable();
59
+
60
+ // DataTable の中身を作成(省略)
61
+
62
+ var form2 = new Form2(table);
63
+ form2.Show();
64
+ }
65
+ ```

2

訂正

2021/04/11 02:49

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,5 @@
1
1
  > メインのフォームでDBから取得した値の入ったデータテーブル(DataTableインスタンス)の内容を、別のフォームに設置されているデータグリッドビュー(仮にADataGridView)に表示する
2
2
 
3
- ADataGridView に DataTable を引数に持つコンストラクタを追加し、メインのフォームで生成した DataTable への参照をメインのフォームで ~~new ADataGridView(table)~~ new Form2(table)のようにして渡せばよいのでは? ← 「別のフォーム」は Form2 と言うことだそうなので訂正
3
+ ~~ADataGridView~~ Form2 に DataTable を引数に持つコンストラクタを追加し、メインのフォームで生成した DataTable への参照をメインのフォームで ~~new ADataGridView(table)~~ new Form2(table)のようにして渡せばよいのでは? (← 「別のフォーム」は Form2 と言うことだそうなので訂正)
4
4
 
5
5
  DataTable への参照を渡してもらえればそれを DataGridView に表示するというコードを書くのは質問者さんは問題なくできるですよね?

1

訂正

2021/04/09 21:17

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,5 @@
1
1
  > メインのフォームでDBから取得した値の入ったデータテーブル(DataTableインスタンス)の内容を、別のフォームに設置されているデータグリッドビュー(仮にADataGridView)に表示する
2
2
 
3
- ADataGridView に DataTable を引数に持つコンストラクタを追加し、メインのフォームで生成した DataTable への参照をメインのフォームで new ADataGridView(table) のようにして渡せばよいのでは?
3
+ ADataGridView に DataTable を引数に持つコンストラクタを追加し、メインのフォームで生成した DataTable への参照をメインのフォームで ~~new ADataGridView(table)~~ new Form2(table)のようにして渡せばよいのでは? ← 「別のフォーム」は Form2 と言うことだそうなので訂正
4
4
 
5
5
  DataTable への参照を渡してもらえればそれを DataGridView に表示するというコードを書くのは質問者さんは問題なくできるですよね?