[C#][WinForm] GridView 中 CheckBox 全選

[C#][WinForm] GridView 中 CheckBox 全選

先建立資料連結,使用北風資料庫為例


        private void gvBind()
        {
            using (SqlConnection con = new SqlConnection(ConnecString))
            {
                con.Open();
                using (SqlCommand cmd = new SqlCommand("select * from Region", con))
                {
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    dataGridView1.DataSource = dt;
                    
                }
            }
        }

然後先建立一個 CheckBox 欄,等下才可以全部勾選


        {
            gvBind();
            
            dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.PaleTurquoise;      //奇數列顏色
            
            //先建立個 CheckBox 欄
            DataGridViewCheckBoxColumn cbCol = new DataGridViewCheckBoxColumn();
            cbCol.Width = 50;   //設定寬度
            cbCol.HeaderText = " 全選";
            cbCol.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;   //置中
            dataGridView1.Columns.Insert(0, cbCol);
        }

像這樣

image

接著再建立要全選的 CheckBox ,一樣放到 Form1_Load 中



            //建立個矩形,等下計算 CheckBox 嵌入 GridView 的位置
            Rectangle rect = dataGridView1.GetCellDisplayRectangle(0, -1, true);
            rect.X = rect.Location.X + rect.Width / 4 -9;
            rect.Y = rect.Location.Y + (rect.Height / 2 -9);

            CheckBox cbHeader = new CheckBox();
            cbHeader.Name = "checkboxHeader";
            cbHeader.Size = new Size(18, 18);
            cbHeader.Location = rect.Location;
            //全選要設定的事件
            cbHeader.CheckedChanged += new EventHandler(cbHeader_CheckedChanged);

            //將 CheckBox 加入到 dataGridView
            dataGridView1.Controls.Add(cbHeader);
            
            #endregion

再把 CheckBox 全選的事件建立


        {
            foreach (DataGridViewRow dr in dataGridView1.Rows)
                dr.Cells[0].Value = ((CheckBox)dataGridView1.Controls.Find("checkboxHeader", true)[0]).Checked;
        }

完成了,呈現如下:

image

點選後

image

 

 

範例檔案 下載

參考資料:

Tech Tips & Tricks

MSDN_Rectangle 結構

Dotblogs 的標籤: ,,