DataGridView覆盖顶部,左侧标题单元格单击(全选)

2 c# datagridview header selectall winforms

我想覆盖DataGridView标题/列单元格(顶部,左侧单元格)中鼠标单击的行为.该单元格会导致选择所有行.相反,我想阻止它选择所有行.我看到一个RowHeaderSelect和ColumnHeaderSelect的事件,但没有一个用于该顶部左侧标题单元格的事件.

有任何想法吗?我只是失明了吗?

anc*_*dra 5

这是单击该单元格时发生的错误代码:

private void OnTopLeftHeaderMouseDown()
{
    if (this.MultiSelect)
    {
        this.SelectAll();
        if (-1 != this.ptCurrentCell.X)
        {
            this.SetCurrentCellAddressCore(this.ptCurrentCell.X, this.ptCurrentCell.Y, false, false, false);
        }
    }
Run Code Online (Sandbox Code Playgroud)

为了防止这种行为,您有两种解决方案:

  1. 禁用多选(如果您的业务逻辑允许)
  2. 继承自己的数据网格并覆盖OnCellMouseDown(类似这样)

    protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex == -1 && e.ColumnIndex == -1) return;
        base.OnCellMouseDown(e);
    }
    
    Run Code Online (Sandbox Code Playgroud)