いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

DataGridView入門記-01 (非連結モードでの使用)

DataGridViewは.Net Framework 2.0で追加されたGridViewの後継コントロールです。
Javaでいう、JTableに当たる機能を持ちます。
JTableが複雑なのと同じく、このDataGridViewも複雑です。(私には・・・(^.^;; )


でも、実務で一番重要であり、且つ一番使用頻度が高いのもこれらの
コントロールでしょう。てことで、少しずつ勉強していきたいと思います。
マスターしてしまえばいいスキルになるんじゃないかと。


DataGridViewには、連結モードと非連結モードというモードがあります。
(実際には、そのほかにも仮想モードってものもあるみたいですが)
連結モードは、何かの特定のデータソース(DataSource)に紐づき、連動して
処理を行うことができるモードです。よくあるのがデータベースのデータセット
と連結して表示したりすることでしょう。


もう一つの非連結モードというのは、その逆です。つまり、特定のデータソースに
紐付いていない状態ということになります。データを明示的にセットして
表示させるのがこちらですね。お手軽に利用できます。


今回から、しばらくは非連結モードでの勉強をがんばっていきます。
こっちの方が、プロパティの動きとかをサンプルで表現するときに
楽だとおもいますので。


てことで、もっとも基本的っぽいサンプルです。
自分でカラムの名前を決めて、行データをセットしてあげるパターンです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:

using System;
using System.Windows.Forms;

namespace Gsf.Samples.DGV{

    /// <summary>
    /// DataGridViewのサンプルクラス(01)です.
    /// </summary>
    public class DataGridViewSample01 : BaseForm{

        DataGridView _grid;

        /// <summary>
        /// コンストラクタ.
        /// </summary>
        public DataGridViewSample01() : base("DataGridViewSample01"){
            // nop;
        }

        ///
        /// <seealso cref="Gsf.Samples.DataGridView.BaseForm"/>
        ///
        protected override void InitializeComponents(){
            //////////////////////////////////////////////////////////////////
            //
            // 非連結モードでDataGridViewを使用.
            // (特定のDataSourceを使用せずにテーブルを構築する)
            //
            // 以下は、最も基本的なパターンです。
            // セルのタイプは、指定していないのでDataGridViewTextBoxColumnになります。
            //
            _grid = new DataGridView();
            _grid.Dock = DockStyle.Fill;

            //
            // カラムの幅の設定.
            //
            // ここでは、セルのデータの幅のみで調整するように指定.(ヘッダーの文字列長は含めない)
            //
            _grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;

            //
            // 行の高さの設定.
            //
            // ここでは、セルのデータの高さのみで調整するように指定.(ヘッダーの高さは含めない)
            // 
            _grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;

            //
            // セルにフォーカスが移った時点で編集モードになるようにする.
            // 
            // [デフォルトでは、フォーカスが移った時点では選択状態となっている.]
            //
            _grid.EditMode = DataGridViewEditMode.EditOnEnter;

            //
            // カラムを設定.
            //
            // [注意] 必ず先にColumnCountプロパティを設定しておくこと.
            //
            _grid.ColumnCount = 2;

            _grid.Columns[0].Name = "ID";
            _grid.Columns[1].Name = "名前";

            //
            // 行データを設定.
            //
            for(int i = 0; i < 10; i++){
                string si = i.ToString();

                _grid.Rows.Add(new string[]{si, "gsf_zero" + si});
            }


            Controls.Add(_grid);
        }

        /// <summary>
        /// アプリケーションエントリポイント.
        /// </summary>
        /// <remarks>
        /// 本クラスのテスト用にフォームを起動します.
        /// </remarks>
        [STAThread]
        static void Main(){
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new DataGridViewSample01());
        }
    }
}

SwingのJTableと.NETのDataGridViewって何気に結構似た感じだと思うんですよね。
てことは、両方を勉強しながらいけば覚えが早くなるかもって思ってみたり・・・w


================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。