Подтвердить что ты не робот

DataGridView: как сфокусировать целую строку вместо одной ячейки?

Я хотел бы использовать элемент управления DataGridView в виде списка с столбцами. Подобно ListView в режиме подробной информации, но я хочу сохранить гибкость DataGridView.

ListView (с подробным представлением и включенным FullRowSelect) выделяет всю строку и показывает метку фокуса по всей строке:
selected row in ListView control

DataGridView (с SelectionMode = FullRowSelect) отображает метку фокусировки только вокруг одной ячейки:
selected row in DataGridView

Итак, знает ли кто-нибудь (в идеале) простой способ сделать выбор строки DataGridView похожим на ListView?

Я не ищу измененного поведения элемента управления - я хочу, чтобы он выглядел одинаково.
В идеале, не испортив методы, которые делают фактическую картину.

4b9b3361

Ответ 1

Поместите этот код либо в конструктор формы, либо установите его в свойствах datagridview с помощью среды IDE.

dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.MultiSelect = false;
dgv.RowPrePaint +=new DataGridViewRowPrePaintEventHandler(dgv_RowPrePaint);

Затем вставьте в код формы следующее событие:

private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    e.PaintParts &= ~DataGridViewPaintParts.Focus;
}

И это работает!:-)

"dgv" - это рассматриваемый DataGridView, а "форма" - это форма, которая содержит его.

Обратите внимание, что эта душа не отображает пунктирный прямоугольник вокруг всей строки. Вместо этого он полностью удаляет фокусные точки.

Ответ 2

Как насчет

SelectionMode == FullRowSelect

и

ReadOnly == true

Это работает для меня.