いろいろ備忘録日記

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

DataGridView入門記-14 (セルの一部がクリックされた際のイベント)(CellClick)


DataGridViewには、大量のイベントがあります。
いろんな用途に応えるために用意されているのですが
いかんせん数が多すぎw


てことで、まずは一番簡単そうなのから。
今回は、CellClickイベントをやってみます。


CellClickイベントは、セルの一部をクリックした際に発生します。
セルの内容がクリックされたイベントを補足する場合は、CellContentClickイベント
の方を使用します。Buttonカラムやリンクカラムの場合はCellContentClickイベントを
を補足します。
MSDNのドキュメントにも記載がありますが、CellClick,CellContentClickイベントの場合
で、セルがチェックボックスセルの場合は、値が変更される前のものが取得されます。
セルがチェックボックスの場合は、CellValueChangedイベントを補足します。


以下サンプルです。
CellClickイベントは、セルの一部のクリックが発動条件なので
セルの枠をクリックしても発生します。

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

using System;
using System.Windows.Forms;

using Gsf.Samples.Utility;

namespace Gsf.Samples.DGV{

    /// <summary>
    /// DataGridView.CellClickイベントについてのサンプルです。
    /// </summary>
    /// <remarks>
    /// CellClickイベントは、セルの一部をクリックした際に発生します。
    /// セルの内容がクリックされたイベントを補足する場合は、CellContentClickイベント
    /// の方を使用します。Buttonカラムやリンクカラムの場合はCellContentClickイベントを
    /// を補足します。
    ///
    /// MSDNのドキュメントにも記載がありますが、CellClick,CellContentClickイベントの場合
    /// で、セルがチェックボックスセルの場合は、値が変更される前のものが取得されます。
    /// セルがチェックボックスの場合は、CellValueChangedイベントを補足します。
    /// </remarks>
    public class DataGridViewSample14 : BaseForm{

        public DataGridViewSample14() : base(typeof(DataGridViewSample14).FullName){
            // nop;
        }

        protected override void InitializeComponents(){
            //
            // DataGridView & BindingSource
            //
            DataGridView grid = new DataGridView();

            grid.Dock = DockStyle.Fill;
            grid.AutoGenerateColumns = true;
            grid.DataSource = GetDataSource();

            //
            // CellClickイベントにコールバックを設定
            //
            grid.CellClick        += OnCellClick;

            Controls.Add(grid);
        }

        object GetDataSource(){
            BindingSource source = new BindingSource();

            source.DataSource = typeof(Sample);

            source.Add(new Sample(0, "gsf_zero1"));
            source.Add(new Sample(1, "gsf_zero2"));

            return source;
        }

        /// <summary>
        /// セルの一部がクリックされた際に発生するCellClickイベントの
        /// コールバックメソッドです。
        /// </summary>
        /// <param name="sender">イベント送信元オブジェクト</param>
        /// <param name="args">イベント引数オブジェクト</param>
        /// <remarks>
        /// クリックされたセルの位置と値をメッセージボックスにて
        /// 表示します。
        /// </remarks>
        protected void OnCellClick(object sender, DataGridViewCellEventArgs args){
            ShowCellInformation(sender, args, "CellClick");
        }

        void ShowCellInformation(object sender, DataGridViewCellEventArgs args, string boxTitle){

            DataGridView g = sender as DataGridView;

            if(g != null){
                int col = args.ColumnIndex;
                int row = args.RowIndex;

                if(col >= 0 && row >= 0){
                    MessageBox.Show(string.Format("行:{0}, 列:{1}, 値:{2}", row, col, g[col, row].Value), boxTitle);
                }
            }
        }

        [STAThread]
        static void Main(){
            ApplicationUtility.Launch(typeof(DataGridViewSample14).FullName);
        }
    }

    class Sample{
        int?   _id;
        string _name;

        public Sample() : this(null, null){
            // nop;
        }

        public Sample(int? id, string name){
            _id   = id;
            _name = name;
        }

        public int? Id{
            get{
                return _id;
            }
            set{
                _id = value;
            }
        }

        public string Name{
            get{
                return _name;
            }
            set{
                _name = value;
            }
        }
    }
}

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

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