- DataTable dt;(DataGridView绑定的DataTable)
- DataGridView dgView;
- dt.Columns.Add("check", typeof(bool));
- dgView.Columns.Clear();
- dgView.AutoGenerateColumns = false;
- dgView.DataSource = dt;
- DataGridViewCheckBoxColumn dtCheck = new DataGridViewCheckBoxColumn();
- //(注意这里是DataGridViewCheckBoxColumn而不是DataGridViewTextBoxColumn)
- dtCheck.DataPropertyName = "check";
- dtCheck.HeaderText = "";
- dgView.Columns.Add(dtCheck);
- dgView.Columns[0].Width = 30;
添加完后要把窗体上DataGridView 右上角的小箭头点开,将里面的“可以编辑“前的复选框选上,否则复选框不能用。
如果把DataGridView 的ColumnHeadersVisible属性设置成false就会没有列头,效果更好!
- DataTable dt = (DataTable)dgView.DataSource;
- //使用方法
- foreach(DataRow row in dt.Rows)
- {
- if (row["check"].ToString() == "True")
- {
- //
- }
- }
需要使复选框不能多选时,将DataGridView 的CellValueChanged事件和CurrentCellDirtyStateChanged事件里添加如下代码:
- private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
- {
- DataGridView dgv = (DataGridView)sender;
- if (dgv.IsCurrentCellDirty)
- {
- dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
- }
- }
- private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
- {
- if (e.ColumnIndex == 0)
- {
- DataGridView dgv = (DataGridView)sender;
- DataTable dt = (DataTable)dgv.DataSource;
- DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv.Rows[e.RowIndex].Cells[0];
- bool value = (Boolean)checkCell.Value;
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- DataRow row = dt.Rows[i];
- if (i != e.RowIndex && value)
- {
- row["check"] = false;
- }
- }
- dgv.Invalidate();
- }
- }