原文地址:
https://stackoverflow.com/questions/868654/how-to-have-checkbox-as-columnheader-of-datagridview
Call the AddChkBoxHeader_DataGridView()
method in OnLoad
function of your form.
CheckBox checkboxHeader = null;
bool isHeaderCheckBoxClicked = false;
private void AddChkBoxHeader_DataGridView()
{
Rectangle rect = dgvRecipeSelector.GetCellDisplayRectangle(0, -1, true);
rect.Y = 10;
rect.X = rect.Location.X + (rect.Width / 4);
checkboxHeader = new CheckBox();
checkboxHeader.Size = new Size(15,15);
checkboxHeader.Location = rect.Location;
dgvRecipeSelector.Controls.Add(checkboxHeader);
checkboxHeader.MouseClick += new MouseEventHandler(checkboxHeader_CheckedChanged);
}
private void checkboxHeader_CheckedChanged(object sender, EventArgs e)
{
HeaderCheckBoxClick((CheckBox)sender);
}
private void HeaderCheckBoxClick(CheckBox headerCheckbox)
{
isHeaderCheckBoxClicked = true;
foreach (DataGridViewRow r in dgvRecipeSelector.Rows)
{
((DataGridViewCheckBoxCell)r.Cells[0]).Value = headerCheckbox.Checked;
}
dgvRecipeSelector.RefreshEdit();
isHeaderCheckBoxClicked = false;
}
另外:C# 怎样判断 datagridview 中的checkbox列是否被选中
https://www.cnblogs.com/dachuang/p/8671267.html
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if ((bool)dataGridView1.Rows[i].Cells[0].EditedFormattedValue==true) //之前用value,值一直不变,改为EditedFormattedValue可以了
{
//TODO
}
}
}