c#不要允许DataGridViewCheckBoxColumn删除选择

本文关键字:DataGridViewCheckBoxColumn 删除 选择 | 更新日期: 2023-09-27 18:13:38

我有一个DataGridView与第一列作为DataGridViewCheckBoxColumn。我有SelectionMode设置为FullRowSelect。我有MultiSelect设置为True。

我希望能够选择多行,然后检查第一列。这将选中或取消选中当前选中的所有复选框;但是,当我这样做时,选择被删除,只有我单击其复选框的行将被选中。

换句话说,我不想在单击复选框单元格时删除所选内容。

c#不要允许DataGridViewCheckBoxColumn删除选择

确保将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更直观。想想看;)

相关文章:
  • 没有找到相关文章