DataGridView переопределяет верхнюю часть, щелчок левой ячейки заголовка (выбрать все) - PullRequest
2 голосов
/ 01 октября 2009

Я хочу переопределить поведение щелчка мыши в ячейке заголовка / столбца DataGridView (верхняя левая ячейка). Эта ячейка вызывает выбор всех строк. Вместо этого я хочу остановить выбор всех строк. Я вижу событие для RowHeaderSelect и ColumnHeaderSelect, но не одно для этой верхней левой ячейки заголовка.

Есть идеи? Я просто слепой?

Ответы [ 3 ]

5 голосов
/ 28 октября 2009

Это растерянный код того, что происходит, когда вы щелкаете по этой ячейке:

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

Для предотвращения такого поведения у вас есть 2 решения:

  1. Отключить множественный выбор (если позволяет ваша бизнес-логика)
  2. Унаследуйте свою собственную таблицу данных и переопределите OnCellMouseDown (как-то так)

    protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex == -1 && e.ColumnIndex == -1) return;
        base.OnCellMouseDown(e);
    }
    
1 голос
/ 01 сентября 2015

Я знаю, что уже поздно, но, надеюсь, это кому-нибудь поможет. Код ниже работал для меня в аналогичном сценарии.

    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();
        }
     }
0 голосов
/ 16 ноября 2009

Вы можете получить некоторый контроль над событием click, используя этот хак:)

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...