Изменить стиль выделения заголовка столбца DataGridView

107
16 февраля 2021, 03:30

На скриншотах: первая строка ListView, вторая строка DataGridView.

Когда нажимаешь на заголовок ListView, он выделяется и перестает. Когда ходишь по DataGridView выделение заголовка остается. И я имею ввиду не цвет, а то что происходит "утопление" ячейки выделенного столбца. Можно от этого уйти? Либо убрать выделение шапки, либо убрать "утопление" при активном выделении.

Answer 1

И я имею ввиду не цвет, а то что происходит "утопление" ячейки выделенного столбца.

Это не просто утопление, это сортировка строк таблицы по заданному столбцу. Посмотрите на треугольник сбоку. Если щелкните еще раз, то порядок сортировки изменится и треугольник перевернется.

Можно от этого уйти? Либо убрать выделение шапки, либо убрать "утопление" при активном выделении.

Можно сделать столбец несортируемым, для этого нужно для столбца DataGridView установить свойству SortMode значение NotSortable.

Вот пример кода:

using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        var grid = new DataGridView { Dock = DockStyle.Fill } ;
        grid.Columns.Add(new DataGridViewTextBoxColumn
        {
            HeaderText = "Сортируемый"
        });
        grid.Columns.Add(new DataGridViewTextBoxColumn
        {
            HeaderText = "Несортируемый",
            SortMode = DataGridViewColumnSortMode.NotSortable
        });
        grid.Rows.Add(new[] { "Раз", "Два" });
        grid.Rows.Add(new[] { "Три", "Четыре" });
        grid.Rows.Add(new[] { "Пять", "Шесть" });
        var form = new Form
        {
            ClientSize = new Size(300, 200)
        };
        form.Controls.Add(grid);
        Application.Run(form);
    }
}

А вот результат:

Если нужно, чтобы при наведении столбец выделялся, но при этом не сортировался, то можно установить SortMode = Programmatic и при этом не обрабатывать событие SortCompare.

Код:

grid.Columns.Add(new DataGridViewTextBoxColumn
        {
            HeaderText = "Несортируемый",
            SortMode = DataGridViewColumnSortMode.Programmatic
        });

Пример:

Если же нужно отключить вообще любое выделение в столбцах, то можно установить свойство DataGridView.EnableHeadersVisualStyles в false. Тогда сортировка сохранится, но столбцы выделяться не будут.

Если в примере выше изменить инициализацию таблицы на:

var grid = new DataGridView { Dock = DockStyle.Fill, EnableHeadersVisualStyles = false };

, то получится следующее:

READ ALSO
Как вывести в label.Text “string” значение (Windows Form Application)

Как вывести в label.Text “string” значение (Windows Form Application)

Всем привет, подскажите как вывести стринговое значение (string) в labelText (C#, Visual Studio 2017, Windows Form Application);

120
Изменить цвет строк в DataGridView

Изменить цвет строк в DataGridView

Пытаюсь изменить цвет строки там где значение penalty = 1

97
Перевести sql запрос в LINQ

Перевести sql запрос в LINQ

Есть часть запроса SQL

94
Раскраска datagridview

Раскраска datagridview

Есть два связанных datagridview

105