• 締切済み

C# datagridviewの使い方

vs community2017 ver15.1でC#を独学しています。 親フォームで取得したデータを子フォームにあるdatagridviewで表示させたいのですが、うまくいきません。 子formのdesigner.csでstaticをpublicにしています。 public System.Windows.Forms.DataGridView dataGridView1; public System.Windows.Forms.DataGridViewTextBoxColumn Column1; public System.Windows.Forms.DataGridViewTextBoxColumn Column2; public System.Windows.Forms.DataGridViewTextBoxColumn Column3; public System.Windows.Forms.DataGridViewTextBoxColumn Column4; 親formのcsファイルで以下のように使用しています。 Form2 kofm = new Form2(); kofm.dataGridView1[0, 0].Value = "aaa"; kofm.StartPosition = FormStartPosition.CenterScreen; kofm.ShowDialog(); これで実行すると、以下のエラーになります。 System.ArgumentOutOfRangeException が発生しました HResult=0x80131502 Message=インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 親フォームのボタンをクリックし、子フォームのdatagridviewに表示させるにはどのようにすればよろしいのでしょうか? 教えてください。 よろしくお願いします。

みんなの回答

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.2

>>インスタンスとはどのようにするのでしょうか? datagridviewは、エクセル表のような感じでは使えません。 No.1さんの回答のURLのページにあるように、必要な列を指定し、必要な行のインスタンスを作ります。 できあがったインスタンスに値をセットする手順となります。 >>この前にtextboxで試したときはそのようなことはしていません。 試してOKになったtextboxは、シンプルなstringデータです。 datagridviewのデータは、kofm.dataGridView1[0, 0].Valueと書かれたように、配列のstringデータです。 ですから、前者はOKになりますが、後者はエラーになります。 このあたりの話は、C言語のポインターの動作を理解していればわかると思います。 C#はC言語にないstringタイプがあるので文字の処理が容易になっていますけど、それでも、ポインターの理解が不要な言語ではありませんからね。 書店にいけば、「Visual C# 逆引き大全」やC#の入門書が色々あると思います。 私も、C#独学ですが、ネットの情報だけでは理解できず、書店で何冊もC#の書籍を購入して勉強しました。

maw7884t
質問者

お礼

ありがとうございました。

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

それだと、DataGridViewのインスタンスに行であるDataGridViewRowのインスタンスが一つもないので、インデックスが範囲を超えているとエラーになるのです。 DataGridViewRowのインスタンスを追加しましょう。 http://www.itlab51.com/?p=3332

maw7884t
質問者

お礼

ありがとうございました。 .Valueで表示する前に.Rows.Add()しろってことだったんですね。 インスタンスとはNewすることだと思っていたので なんだろうと思いました。 ありがとうございました。

maw7884t
質問者

補足

すみません。 インスタンスとはどのようにするのでしょうか? といいますのも、この前にtextboxで試したときはそのようなことはしていません。 子フォームのdesigner.csでもtextboxをpublicにして 親フォームで Form2 fm2 = new Form2(); fm2.textBox1.Text += "abc"; fm2.StartPosition = FormStartPosition.CenterScreen; fm2.ShowDialog(); としただけでエラーにならず、 子フォームのtextboxに表示されました。 大変申し訳ありませんが、構文を書いていただけませんか? よろしくお願いします。