DataGridView: как сфокусировать всю строку вместо одной ячейки? - PullRequest
28 голосов
/ 13 ноября 2008

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

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

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

Итак, кто-нибудь знает какой-нибудь (в идеале) простой способ сделать выбор строки DataGridView похожим на выбор ListView?
Я не ищу измененного поведения элемента управления - я только хочу, чтобы он выглядел одинаково.
В идеале, не путаясь с методами, которые делают настоящую покраску.

Ответы [ 2 ]

44 голосов
/ 01 декабря 2008

Поместите этот код либо в конструктор вашей формы, либо задайте его в свойствах Свойства в 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 , о котором идет речь, а «форма» - это Форма , которая ее содержит.

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

18 голосов
/ 29 ноября 2011

Как насчет

SelectionMode == FullRowSelect

и

ReadOnly == true

У меня это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...