DataGridView

  • チェックボックス列に設定する。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmMain : Form
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public frmMain()
        {
            // コンポーネントの初期化
            InitializeComponent();
            Init();
        }

        /// <summary>
        /// 初期化処理
        /// </summary>
        private void Init()
        {
            DataGridView grdMain = new DataGridView();
            
            // グリッドを追加
            this.Controls.Add(grdMain);
            InitGrd(grdMain);
        }

        /// <summary>
        /// グリッドの初期化処理
        /// </summary>
        /// <param name="grd"></param>
        private void InitGrd(DataGridView grd)
        {
            // グリッドの位置と大きさを設定
            grd.SetBounds(0, 0, this.Width, this.Height);

            // 行の追加不可
            grd.AllowUserToAddRows = false;
            
            // 行ヘッダ非表示
            grd.RowHeadersVisible = false;

            // チェックボックス列を追加
            grd.Columns.Add(new DataGridViewCheckBoxColumn());
            grd.Rows.Add();
        }

    }
}

  • チェックボックス列がクリックされたらメッセージを出力

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmMain : Form
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public frmMain()
        {
            // コンポーネントの初期化
            InitializeComponent();
            Init();
        }

        /// <summary>
        /// 初期化処理
        /// </summary>
        private void Init()
        {
            DataGridView dgvMain = new DataGridView();

            // グリッドを追加
            this.Controls.Add(dgvMain);
            InitGrd(dgvMain);
        }

        /// <summary>
        /// グリッドの初期化処理
        /// </summary>
        /// <param name="dgv"></param>
        private void InitGrd(DataGridView dgv)
        {
            
            // グリッドの位置と大きさを設定
            dgv.SetBounds(0, 0, this.Width, this.Height);

            // 行の追加不可
            dgv.AllowUserToAddRows = false;

            // 行ヘッダ非表示
            dgv.RowHeadersVisible = false;

            // チェックボックス列を追加
            DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
            dgv.Columns.Add(col);
            dgv.Rows.Add();
            dgv.Rows.Add();
            dgv.CellContentClick += dgvMain_CellContentClick;
        }

        private void dgvMain_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            //DataGridViewCheckBoxColumnならば、チェックボックス列がクリックされた
            if (dgv.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn)
            {
                MessageBox.Show(string.Format("{0}行のチェックボックスがクリックされました。", e.RowIndex.ToString()));
            }
        }

    }
}

  • コンボボックス列を追加する

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmMain : Form
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public frmMain()
        {
            // コンポーネントの初期化
            InitializeComponent();
            Init();
        }

        /// <summary>
        /// 初期化処理
        /// </summary>
        private void Init()
        {
            DataGridView grdMain = new DataGridView();
            
            // グリッドを追加
            this.Controls.Add(grdMain);
            InitGrd(grdMain);
        }

        /// <summary>
        /// グリッドの初期化処理
        /// </summary>
        /// <param name="grd"></param>
        private void InitGrd(DataGridView grd)
        {
            // グリッドの位置と大きさを設定
            grd.SetBounds(0, 0, this.Width, this.Height);

            // 行の追加不可
            grd.AllowUserToAddRows = false;
            
            // 行ヘッダ非表示
            grd.RowHeadersVisible = false;

            // コンボボックス列を追加
            grd.Columns.Add(new DataGridViewComboBoxColumn());

            // コンボボックスの初期化
            InitCmb((DataGridViewComboBoxColumn)grd.Columns[0]);
            grd.Rows.Add();

            // コンボの初期値
            grd.Rows[0].Cells[0].Value = "02";
        }

        /// <summary>
        /// コンボボックスのリスト項目を設定
        /// </summary>
        /// <param name="col"></param>
        private void InitCmb(DataGridViewComboBoxColumn col)
        {
            DataTable dt = new DataTable();
            DataRow row;
            string strValMember = "val";
            string strDisMember = "dis";

            dt.Columns.Add(strValMember);
            dt.Columns.Add(strDisMember);

            row = dt.NewRow();
            row[strValMember] = "01";
            row[strDisMember] = "項目①";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row[strValMember] = "02";
            row[strDisMember] = "項目②";
            dt.Rows.Add(row);

            col.DataSource = dt;
            col.ValueMember = strValMember;
            col.DisplayMember = strDisMember;
            
        }
    }
}

  • コンボボックス列の値を変更した場合に、メッセージを出力する。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmMain : Form
    {
        private DataGridView dgvMain = new DataGridView();
        private DataGridViewComboBoxEditingControl dgvCmb;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public frmMain()
        {
            // コンポーネントの初期化
            InitializeComponent();
            Init();
        }

        /// <summary>
        /// 初期化処理
        /// </summary>
        private void Init()
        {
            // グリッドを追加
            this.Controls.Add(dgvMain);
            this.Initdgv();
        }

        /// <summary>
        /// グリッドの初期化処理
        /// </summary>
        private void Initdgv()
        {
            DataGridViewComboBoxColumn colCmb = new DataGridViewComboBoxColumn();

            // グリッドの位置と大きさを設定
            this.dgvMain.SetBounds(0, 0, this.Width, this.Height);

            // 行の追加不可
            this.dgvMain.AllowUserToAddRows = false;

            // 行ヘッダ非表示
            this.dgvMain.RowHeadersVisible = false;

            // コンボボックスの初期化
            this.InitColCmb(colCmb);

            // コンボボックス列を追加
            this.dgvMain.Columns.Add(colCmb);

            // 行追加
            this.dgvMain.Rows.Add();
            this.dgvMain.Rows.Add();

            // イベントハンドラの追加
            this.dgvMain.EditingControlShowing += dgvMain_EditingControlShowing;
            this.dgvMain.CellEndEdit += dgvMain_CellEndEdit;
        }

        /// <summary>
        /// セルを編集するためのコントロールが表示されたときの処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvMain_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            // DataGridViewのコンボボックス編集コントロールが表示されたか
            if (e.Control is DataGridViewComboBoxEditingControl)
            {
                // イベントハンドラの開放用にDataGridViewComboBoxEditingControlを保持
                this.dgvCmb = (DataGridViewComboBoxEditingControl)e.Control;
                // SelectedIndexChangedイベントハンドラを追加
                this.dgvCmb.SelectedIndexChanged += dgvCmb_SelectedIndexChanged;
            }
        }

        /// <summary>
        /// セルの編集完了
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvMain_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        { 
            if (sender is DataGridView)
            {
                // SelectedIndexChangedイベントハンドラを開放
                this.dgvCmb.SelectedIndexChanged -= dgvCmb_SelectedIndexChanged;
            }
        }

        /// <summary>
        /// コンボの選択値変更時の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvCmb_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender is DataGridViewComboBoxEditingControl)
            {
                DataGridViewComboBoxEditingControl cmb = (DataGridViewComboBoxEditingControl)sender;

                MessageBox.Show(string.Format("{0} が選択されました。", cmb.Text));
            }
        }

        /// <summary>
        /// コンボボックスのリスト項目を設定
        /// </summary>
        /// <param name="col"></param>
        private void InitColCmb(DataGridViewComboBoxColumn col)
        {
            DataTable dt = new DataTable();
            DataRow row;
            string strValMember = "val";
            string strDisMember = "dis";

            dt.Columns.Add(strValMember);
            dt.Columns.Add(strDisMember);

            row = dt.NewRow();
            row[strValMember] = "01";
            row[strDisMember] = "項目①";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row[strValMember] = "02";
            row[strDisMember] = "項目②";
            dt.Rows.Add(row);

            col.DataSource = dt;
            col.ValueMember = strValMember;
            col.DisplayMember = strDisMember;

        }
    }
}
最終更新:2011年06月16日 23:51
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。