memo

プログラミング備忘録

【C#】DataGridView表

久しぶりにVisual C#を使う必要があったのですが、DataGridViewの使い方がわかっていなかったので備忘録。

DataGridViewの本来の使い方はわかりませんが、最速、表で表示するだけのものを作りたかったので使えそうだなと思って使いました。

Visual Studio 2017で作成したので、最新ではまた変わってるところあるかもしれないですね。

設定
・ヘッダは表示しない
・スクロールバーなくす
・上下キー等でセルがずれないようにする(固定)
・ユーザーはセルサイズを変更できない、増やせない
・デフォルトでは、セルをクリックすると青反転するようになっていたが、特にしないようにする
・dataGridViewのサイズだけGUI画面で編集しておき、基本的にソースから設定する
・関数でセル?×?を設定できるようにする
・セルは縦横、それぞれをサイズを均等に分割する

完成は以下のようになりました。

f:id:shinopikapi:20201115230811p:plain
DataGridView表

コンストラクタで呼ぶ。
3×3の表です。

       setGridView(dataGridView1, 3, 3);

関数の中身は以下。

        private void setGridView(DataGridView d, int col, int row)
        {
            // headなくす
            d.ColumnHeadersVisible = false;
            d.RowHeadersVisible = false;

            // scroll barなくす
            d.ScrollBars = ScrollBars.None;

            // セル設定
            d.ColumnCount = col;
            d.RowCount = row;

            // セルサイズ自動調整-->ちっちゃくなった……
            //d.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            //d.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

            // 行、列のサイズを変更
            int yoko = d.Size.Width / col;
            int tate = d.Size.Height / row;
            for (int j = 0; j < d.ColumnCount; j++)
            {
                // サイズ
                d.Columns[j].Width = yoko;
                // キーで移動したときにずれない(固定)
                d.Columns[j].Frozen = true;
            }
            for (int i=0; i< d.RowCount; i++)
            {
                // サイズ
                d.Rows[i].Height = tate;
                // キーで移動したときにずれない(固定)
                d.Rows[i].Frozen = true;
            }

            // ユーザーがサイズ変更不可
            d.AllowUserToResizeColumns = false;
            d.AllowUserToResizeRows = false;

            // 背景青反転しないようにする
            d.DefaultCellStyle.SelectionBackColor = Color.White;
            d.DefaultCellStyle.SelectionForeColor = Color.Black;

            // 背景文字色
            d.BackgroundColor = Color.White;
            d.ForeColor = Color.Black;
            
            // 各セルの値
            for (int i = 0; i < d.RowCount; i++)
            {
                for (int j = 0; j < d.ColumnCount; j++)
                {
                    d.Rows[i].Cells[j].Value = (i*3)+j;
                }
            }
        }


セルサイズ自動調整で、良い感じに横のサイズをmaxとして、均等にならないかなーと思ったのですが、実際やってみるとセルがちっちゃく均等になって余白が出来るような感じになりました。
どういうときに自動調整するのだろう。
サイズもセル1個ずつ設定しましたが、全部同じサイズなら一度で設定する方法あるような気がしますが……。
すぐにはわからなかったので、上記のようにしています。



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