private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView.Rows[e.RowIndex].Selected = true;
}
DataGridView clicks
По тематике их можно объединить именно под этим названием..
1) Как реализовать выделение строки при клике вне ContentRegion, т.е. выделить строку находящуюся на уровне клика (SelecttionMode = FullRowSelect)..
2) Как реализовать выделение при щелчке правой кнопки мыши..
3) Как реализовать появление ContextMenuStrip только, когда 'кликнули' на ContentRegion (ContextMenuStrip привязан к DataGridView)..
2) MultiSelect = false;
на CellMouseDown ставим
Код:
3) Есть много способов... вот несколько:
первый почти описал, см. пункт 2, осталось установить св-во ContextMenuStrip. (это геморный способ, т.к. меню будет появляться и при клике вне записи таблицы, и при клике на заголовке (Header).
Второй: есть замечательное событие :) RowContextMenuStripNeeded
Код:
private void dataGridPayments_RowContextMenuStripNeeded(object sender, DataGridViewRowContextMenuStripNeededEventArgs e)
{
e.ContextMenuStrip = contextMenu1;
}
{
e.ContextMenuStrip = contextMenu1;
}
Третий: чисто дизайнер :)
RowTemplate -> ContextMenuStrip (тут думаю понятно)
или так..
dataGridView1.RowTemplate.ContextMenuStrip = contextMenu1;
Поясню насчет первого(хотя и так вроде все понятно):
В DataGrdiView, чтобы выделить строку(ячейку) и нужно по ней щелкнуть..
Рассмотрим ситуацию - Форма, к примеру, растянута на весь экран, dataGridView.Dock = Fill, а колонка в гриде, к примеру одна;), причем растянута она не на весь грид..
Так вот, как выделить строку если щелкнули не на ячейке поля, а уже вне ее, справа..
есть метод DataGridView.HitTest(int x, int y), возвращающий информацию о том по чему ты "топнул" указателем, если передать туда координаты мыши...
Примерный код (пишу на коленке, улови только идею, сам никогда не пробовал):
Код:
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
int y = e.Y; //в качестве y передаем координату клика
int x= dataGridView1.Location.X + (int)dataGridView1.Columns[0].Width / 2;
//в качестве x координату середины заголовка твоей единственной колонки
//чтобы "ткнуть" именно в ячейку
DataGridView.HitTestInfo hitInfo = dataGridView1.HitTest(x, y);
//проверка на то, что мы действительно в ячейке
if (hitInfo.Type == DataGridViewHitTestType.Cell)
{
//выделяем :)
dataGridView1[hitInfo.ColumnIndex, hitInfo.RowIndex].Selected = true;
}
}
{
int y = e.Y; //в качестве y передаем координату клика
int x= dataGridView1.Location.X + (int)dataGridView1.Columns[0].Width / 2;
//в качестве x координату середины заголовка твоей единственной колонки
//чтобы "ткнуть" именно в ячейку
DataGridView.HitTestInfo hitInfo = dataGridView1.HitTest(x, y);
//проверка на то, что мы действительно в ячейке
if (hitInfo.Type == DataGridViewHitTestType.Cell)
{
//выделяем :)
dataGridView1[hitInfo.ColumnIndex, hitInfo.RowIndex].Selected = true;
}
}
Возможно ещё понадобится преобразование координат...