DataGridView переопределяет верхнюю часть, щелчок левой ячейки заголовка (выбрать все)
Я хочу переопределить поведение щелчка мыши в ячейке заголовка / столбца DataGridView (верхняя левая ячейка). Эта ячейка вызывает выбор всех строк. Вместо этого я хочу остановить выбор всех строк. Я вижу событие для RowHeaderSelect и ColumnHeaderSelect, но не одно для этой верхней левой ячейки заголовка.
Есть идеи? Я просто слепой?
3 ответа
Это растерянный код того, что происходит, когда вы нажимаете эту ячейку:
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 решения:
- Отключить множественный выбор (если позволяет ваша бизнес-логика)
Унаследуйте свой собственный массив данных и переопределите
OnCellMouseDown
(что-то вроде этого)protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex == -1) return; base.OnCellMouseDown(e); }
Я знаю, что уже поздно, но, надеюсь, это кому-нибудь поможет. Код ниже работал для меня в аналогичном сценарии.
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();
}
}
Вы можете получить некоторый контроль над событием 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
}
}
Переопределить метод OnCellMouseDown:
if (e.ColumnIndex == -1 && e.RowIndex == -1)
{
return;
}
else
{
base.OnCellMouseDown(e);
}