DataGridView override top,left header cell click (select all)

十年热恋 提交于 2019-11-28 09:46:41

问题


I want to override the behavior of a mouse click in the DataGridView header/column cell (top, left cell). That cell causes all rows to be selected. Instead, I want to stop it from selecting all rows. I see an event for RowHeaderSelect and ColumnHeaderSelect but not one for that top, left header cell.

Any ideas? Am I just being blind?


回答1:


This is the dissasembled code of what happens when you click that cell:

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

In order for you to prevent this behavior you have 2 solutions:

  1. Disable multi selection (if your business logic permits)
  2. Inherit your own datagrid and override OnCellMouseDown (something like this)

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



回答2:


I know this is late but hopefully it will help someone. The code below worked for me in a similar scenario.

    private void MyDataGridView_MouseUp(object sender, MouseEventArgs e)
    {
        DataGridView.HitTestInfo hitInfo = this.MyDataGridView.HitTest(e.X, e.Y);
        if (hitInfo.Type == DataGridViewHitTestType.TopLeftHeader)
        {
            MyDataGridView.ClearSelection();
        }
     }



回答3:


You could gain some control over the click event using this hack :)

private void dataGridView1_Click(object sender, EventArgs e)
{
    MouseEventArgs args = (MouseEventArgs)e;
    DataGridView dgv = (DataGridView)sender;
    DataGridView.HitTestInfo hit = dgv.HitTest(args.X, args.Y);
    if (hit.Type == DataGridViewHitTestType.TopLeftHeader)
    {
        // do something here
    }
}


来源:https://stackoverflow.com/questions/1504620/datagridview-override-top-left-header-cell-click-select-all

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!