memo

プログラミング備忘録

【C#】DataGridView表2

前回は表示するだけの表をDataGridViewで作成しました。
shinopikapi.hateblo.jp



今回は、セルに入力した値をボタンクリックで取得して表示するだけのものを作成しました。

f:id:shinopikapi:20201116000113p:plain
DataGridView表示取得

GUI画面でツールボックスからボタン作成し、ボタンでダブルクリックすると自動でprivate void button1_Click(object sender, EventArgs e)が作成されます。
クリックしたらしたいことをここに記載。

やってることはこれだけ
・ボタンクリックしたらセル個数を取得
・セル個数分配列要素数設定
・テキストボックスに表示

       private void button1_Click(object sender, EventArgs e)
        {
            int num = dataGridView1.ColumnCount * dataGridView1.RowCount;
            int[] val = new int[num];
            val = getData(dataGridView1);

            string text = "";
            if (val != null)
            {
                textBox1.Text = "";
                for(int i=0; i<val.Length; i++)
                {
                    textBox1.Text += (val[i].ToString()) + " ";
                }
            }
        }

getDataの中身

private int[] getData(DataGridView d)
        {
            if (d == null)
            {
                return null;
            }

            int col = d.ColumnCount;
            int row = d.RowCount;
            if(col==0 || row == 0)
            {
                return null;
            }

            int[] val = new int[col*row];
            int cnt = 0;
            // 各セルの値
            //string sval = "";
            for (int i = 0; i < d.RowCount; i++)
            {
                for (int j = 0; j < d.ColumnCount; j++)
                {
                    //sval = d.Rows[i].Cells[j].Value.ToString();
                    // object->string->int
                    val[cnt++] = Int32.Parse(d.Rows[i].Cells[j].Value.ToString());
                }
            }

            return val;
        }

セルのタイプを変更出来ると思うのですが、ColumnTempleteからどうやって何の値を設定すればいいかわかっていません。
そもそもColumnCountで個数設定しましたが(前回ブログ参照)、宣言の時点でタイプやら名前やらColumnは設定出来た気がします。
作成の方法が色々あるのか……??????('ω')

各セルの値を取得する際、object型になっていて変換する必要がありました。
でもセルタイプを都合のいいように設定していれば、string->intだけでよかったような気もします。
そこまで調べられていません。
何回かやりながらわかればいいかな、くらいで作成しました。



参考
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview?view=net-5.0