Windows Formsで本体のFormとは別のFormにADO.NETのDataTableを渡して、そのFormから元のFormのDataGridViewにdetaGridView1.DataSource = table1と、データを表示させようとしても、元の本体のFormのDataGridViewに変化が起こりません。
一体どうしてなのでしょうか?
データのソースを示して質問したいのですが、コードが長すぎて出来ません。
なお、DataTableのtable1のデータはSQL Serverのものです。
よろしくお願い致します。
質問を編集させていただきます。
まず、前スレッドは削除依頼をしました。また、Visual Studio Community 2017 Version 15.8.4です。
NewForm form1 = new NewForm();
form1.Server = serverName;
form1.Authentic = authentic;
form1.LogName = loginName;
form1.LogPass = loginPass;
form1.Table = dataTable;
form1.Show();
なお、このserverName, authentic, loginName, loginPassは、SQL Serverのものです。
また、この現象を再現する最小限のものを提示したいのですが、まだ、再現できる状態でお見せできる状態にはなっていません。
ただ、怪しいのは、大元のFormをNewFormのなかで、MotoForm form = new MotoForm();というコードを入れたうえで、そのdataGridView1のDataSourceにDataTableを入れたことで、元々表示されていたMotoFormとは別のMotoFormのdataGridView1に
DataTableを表示させていたのかも知れません。再現できるコードの提示とは別に、ちょっと調べてみます。
あと、NewFormの呼び出しに当たっては、上記のloginNameなどとは別に、
C#
1 form1.NewForm = this; 2コード
とし、NewFormのcs内では、
C#
1 public Form NewForm 2 { 3 get { return newForm; } 4 set { newForm = value; } 5 }
として、newformにMotoFormを渡しておりました。
このため、問題は、別フォームからDataGridViewに表示できないという問題ではなくて、別フォームから元のMotoFormに戻れないということのようです。
というのも、別フォームのボタンクリックイベントとして、
C#
1motoForm.SetDataOnGrid(server, authentic, logname, logpass, f, c, l, a, s);
というように、motoFormのメソッドにアクセスするためにMotoForm form = new MotoForm();というコードが必要だったからです。
MotoForm form = new MotoForm();というコードを利用しないで、MotoFormのdataGridView1にDataTableを表示させるにはどうしたらよいのか、という問題のようでした。
ここまでで、何を言いたいのかわかっていただけたでしょうか?
ややっこしいといけないので、あらためてのエッセンスだけにしたものを提示させていただきます。
C#
1// 親フォームは以下のコード 2namespace FormsApp 3{ 4 public partial class OyaForm : Form 5 { 6 public OyaForm() 7 { 8 InitializeComponent(); 9 } 10 11 private void oyaButton_Click(object sender, EventArgs e) 12 { 13 KoForm koForm = new KoForm(); 14 koForm.Show(); 15 } 16 } 17} 18 19// 子フォームには以下のコード 20 private Form oyaForm = new Form(); 21 private string sKoText = ""; 22 23 public KoForm() 24 { 25 InitializeComponent(); 26 } 27 28 public Form justOyaForm 29 { 30 get { return oyaForm; } 31 set { oyaForm = value; } 32 } 33 34 35 private void koButton_Click(object sender, EventArgs e) 36 { 37 if (koBox.Text != "") 38 { 39 sKoText = koBox.Text; 40 Form oya = new OyaForm(); 41 oya.oyaBox.Text = sKoText; // ここがエラーとなって、コンパイルできません。 42 } 43 }
最小限というと、こんなところです。上記、エラー部分をどうしたらよいでしょうか?
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー