c#不要允许DataGridViewCheckBoxColumn删除选择
本文关键字:DataGridViewCheckBoxColumn 删除 选择 | 更新日期: 2023-09-27 18:13:38
我有一个DataGridView与第一列作为DataGridViewCheckBoxColumn。我有SelectionMode设置为FullRowSelect。我有MultiSelect设置为True。
我希望能够选择多行,然后检查第一列。这将选中或取消选中当前选中的所有复选框;但是,当我这样做时,选择被删除,只有我单击其复选框的行将被选中。
换句话说,我不想在单击复选框单元格时删除所选内容。
确保将EditMode设置为editprogrammtically
public class DataGridViewUsers : DataGridView
{
protected override void OnMouseDown(MouseEventArgs e)
{
int col = HitTest(e.X, e.Y).ColumnIndex;
int row = HitTest(e.X, e.Y).RowIndex;
if (col == -1 || row == -1)
{
base.OnMouseDown(e);
return;
}
// Make sure we select the row we are clicking on
if (!Rows[row].Selected)
base.OnMouseDown(e);
if (col == 0 && Rows[row].Selected)
{
DataGridViewCheckBoxCell cell = Rows[row].Cells[0] as DataGridViewCheckBoxCell;
bool bIsSelection = cell != null && cell.Value != null && (bool)cell.Value;
for (int i = 0; i < SelectedRows.Count; i++)
{
SelectedRows[i].SetValues(!bIsSelection);
}
}
else
{
// Process normally
base.OnMouseDown(e);
}
}
}
我不熟悉DataGridView,因为我只是使用DevExpress-Framework,但我希望你必须在单击复选框时保存选择。稍后您可以恢复选择。
List<DataRow> tempSelection = new List<DataRow>();
foreach (DataRow row in dataGridView.SelectedRows)
{
tempSelection.Add(row);
}
//click your checkbox and do some stuff
foreach (DataRow row in tempSelection)
{
row.Selected = true;
}
但是你认为点击一个复选框并选择多个值是直观的吗?也许使用一个带有"CheckSelection"按钮的contextMenu更直观。想想看;)