【发布时间】:2014-10-13 07:24:41
【问题描述】:
我写了一个C# Windows Form程序,我想要的效果如下。
当用户点击All复选框时,该行的所有复选框都会被选中。另一方面,如果用户再次单击All 复选框,则该行的所有复选框都将被取消选中。此外,如果用户取消选中任何复选框(不包括 All 复选框),则必须取消选中 All 复选框。但是,CellValueChanged 将在任何框的值更改时被调用。很难处理。而且,我的代码总是无限循环。任何人都可以修复它吗?非常感谢!!
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 1 && e.RowIndex >= 0)
{
if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[1].Value))
{
//check all the Checkboxs
for (int i = 2; i < 26; i++)
dataGridView1.Rows[e.RowIndex].Cells[i].Value = true;
//if the other row all checked, unchecked it all
for(int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (i == e.RowIndex)
continue;
if(Convert.ToBoolean(dataGridView1.Rows[i].Cells[1].Value))
{
for(int j = 1; j < dataGridView1.Rows[i].Cells.Count; j++)
{
dataGridView1.Rows[i].Cells[j].Value = false;
}
}
}
}
else
for (int i = 2; i < 26; i++)
dataGridView1.Rows[e.RowIndex].Cells[i].Value = false;
}
else if(e.ColumnIndex > 1 && e.RowIndex >= 0)
{
bool flag = true;
for (int i = 2; i < dataGridView1.Rows[e.RowIndex].Cells.Count; i++)
{
if (!Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[i].Value))
flag = false;
}
if (flag)
dataGridView1.Rows[e.RowIndex].Cells[1].Value = false;
else
dataGridView1.Rows[e.RowIndex].Cells[1].Value = true;
}
}
【问题讨论】:
标签: c# winforms checkbox datagridview