На скриншотах: первая строка ListView, вторая строка DataGridView.
Когда нажимаешь на заголовок ListView, он выделяется и перестает. Когда ходишь по DataGridView выделение заголовка остается. И я имею ввиду не цвет, а то что происходит "утопление" ячейки выделенного столбца. Можно от этого уйти? Либо убрать выделение шапки, либо убрать "утопление" при активном выделении.
И я имею ввиду не цвет, а то что происходит "утопление" ячейки выделенного столбца.
Это не просто утопление, это сортировка строк таблицы по заданному столбцу. Посмотрите на треугольник сбоку. Если щелкните еще раз, то порядок сортировки изменится и треугольник перевернется.
Можно от этого уйти? Либо убрать выделение шапки, либо убрать "утопление" при активном выделении.
Можно сделать столбец несортируемым, для этого нужно для столбца 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 };
, то получится следующее:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем привет, подскажите как вывести стринговое значение (string) в labelText (C#, Visual Studio 2017, Windows Form Application);