c datagridview выделение строки

Active member

Как выделить строку в DataGridView?

На некоторых форумах очень часто можно встретить вопрос: как выделить строку в DataGridView? На самом деле сделать это очень просто, например, предположим, что у нас есть небольшая таблица, которая содержит всего четыре строки (записи) и нам в качестве задачи необходимо выделить третью строку красным цветом.

Решение:
dataGr >
Результат:

Сначала с помощью свойства Rows определяем, какую строку мы хотим выделить в DataGridView, для этого просто указываем индекс нужной нам строки. Не забывайте, что индекс первого элемента начинается с нуля, поэтому вместо числа три, мы указываем число два. Затем, используя свойство DefaultCellStyle, которое позволяет задать стиль для любой ячейки, мы получаем доступ к свойству BackColor, которое в свою очередь позволяет нам с помощью перечисления Color выделить каждую ячейку красным цветом, в результате чего мы получаем выделенную строку. Вот собственно и всё.

Иногда требуется, чтобы приложение выполняло действия на основе выбора пользователя в DataGridView элементе управления. Sometimes you want your application to perform actions based on user selections within a DataGridView control. В зависимости от действий может потребоваться ограничить возможные виды выбора. Depending on the actions, you may want to restrict the kinds of selection that are possible. Например, предположим, что приложение может напечатать отчет для выбранной в данный момент записи. For example, suppose your application can print a report for the currently selected record. В этом случае может потребоваться настроить DataGridView элемент управления таким образом, чтобы при щелчке в любом месте строки всегда выбиралась вся строка и можно было выбрать только одну строку за раз. In this case, you may want to configure the DataGridView control so that clicking anywhere within a row always selects the entire row, and so that only one row at a time can be selected.

Можно указать разрешенные параметры, задав DataGridView.SelectionMode для свойства одно из следующих DataGridViewSelectionMode значений перечисления. You can specify the selections allowed by setting the DataGridView.SelectionMode property to one of the following DataGridViewSelectionMode enumeration values.

Значение Датагридвиевселектионмоде DataGridViewSelectionMode value Описание Description
CellSelect При щелчке ячейки она выделяется. Clicking a cell selects it. Заголовки строк и столбцов нельзя использовать для выбора. Row and column headers cannot be used for selection.
ColumnHeaderSelect При щелчке ячейки она выделяется. Clicking a cell selects it. При щелчке заголовка столбца выделяется весь столбец. Clicking a column header selects the entire column. Заголовки столбцов нельзя использовать для сортировки. Column headers cannot be used for sorting.
FullColumnSelect При щелчке ячейки или заголовка столбца выделяется весь столбец. Clicking a cell or a column header selects the entire column. Заголовки столбцов нельзя использовать для сортировки. Column headers cannot be used for sorting.
FullRowSelect При щелчке ячейки или заголовка строки выделяется вся строка. Clicking a cell or a row header selects the entire row.
RowHeaderSelect Режим выбора по умолчанию. Default selection mode. При щелчке ячейки она выделяется. Clicking a cell selects it. При щелчке заголовка строки выделяется вся строка. Clicking a row header selects the entire row.

Изменение режима выбора во время выполнения автоматически снимает текущее выделение. Changing the selection mode at run time automatically clears the current selection.

По умолчанию пользователи могут выбирать несколько строк, столбцов или ячеек путем перетаскивания мышью, нажатием клавиш CTRL или SHIFT при выборе для расширения или изменения выделенного фрагмента или щелчка ячейки верхнего левого заголовка для выбора всех ячеек в элементе управления. By default, users can select multiple rows, columns, or cells by dragging with the mouse, pressing CTRL or SHIFT while selecting to extend or modify a selection, or clicking the top-left header cell to select all cells in the control. Чтобы предотвратить такое поведение, присвойте MultiSelect false свойству значение. To prevent this behavior, set the MultiSelect property to false .

Режимы FullRowSelect иRowHeaderSelect позволяют пользователям удалять строки, выбирая их и нажимая клавишу DELETE. The FullRowSelect and RowHeaderSelect modes allow users to delete rows by selecting them and pressing the DELETE key. Пользователи могут удалять строки только в том случае, если текущая ячейка не находится в AllowUserToDeleteRows режиме редактирования, свойство true имеет значение, а базовый источник данных поддерживает удаленное пользователем удаление строк. Users can delete rows only when the current cell is not in edit mode, the AllowUserToDeleteRows property is set to true , and the underlying data source supports user-driven row deletion. Обратите внимание, что эти параметры не предотвращают удаление программных строк. Note that these settings do not prevent programmatic row deletion.

Программный выбор Programmatic Selection

Текущий режим выделения ограничит поведение программного выделения, а также выбор пользователя. The current selection mode restricts the behavior of programmatic selection as well as user selection. Текущий выбор можно изменить программным путем, задав Selected свойство любых ячеек, строк или столбцов, имеющихся DataGridView в элементе управления. You can change the current selection programmatically by setting the Selected property of any cells, rows, or columns present in the DataGridView control. Можно также выбрать все ячейки в элементе управления с помощью SelectAll метода, в зависимости от режима выбора. You can also select all cells in the control through the SelectAll method, depending on the selection mode. Чтобы очистить выбор, используйте ClearSelection метод. To clear the selection, use the ClearSelection method.

Если свойство имеет true значение, можно добавить DataGridView или Selected удалить элементы из выбора, изменив свойство элемента. MultiSelect If the MultiSelect property is set to true , you can add DataGridView elements to or remove them from the selection by changing the Selected property of the element. В противном случае Selected при установке true свойства в значение для одного элемента автоматически удаляются другие элементы из выбора. Otherwise, setting the Selected property to true for one element automatically removes other elements from the selection.

Обратите внимание, что изменение значения CurrentCell свойства не приводит к изменению текущего выделения. Note that changing the value of the CurrentCell property does not alter the current selection.

Коллекцию выбранных в данный момент ячеек, строк или столбцов можно получить SelectedCellsс помощью свойств DataGridView , SelectedRowsи SelectedColumns элемента управления. You can retrieve a collection of the currently selected cells, rows, or columns through the SelectedCells, SelectedRows, and SelectedColumns properties of the DataGridView control. Доступ к этим свойствам неэффективен, если выбрана каждая ячейка в элементе управления. Accessing these properties is inefficient when every cell in the control is selected. Чтобы избежать снижения производительности в этом случае, сначала используйте AreAllCellsSelected метод. To avoid a performance penalty in this case, use the AreAllCellsSelected method first. Кроме того, доступ к этим коллекциям для определения количества выбранных ячеек, строк или столбцов может быть неэффективным. Additionally, accessing these collections to determine the number of selected cells, rows, or columns can be inefficient. Вместо GetCellCountэтого следует использовать метод, GetRowCountили GetColumnCount , передав Selected значение. Instead, you should use the GetCellCount, GetRowCount, or GetColumnCount method, passing in the Selected value.

Пример кода, демонстрирующий программное использование выбранных ячеек, можно найти в DataGridView обзоре класса. Example code that demonstrates the programmatic use of selected cells can be found in the DataGridView class overview.

Нужно, что бы при нажатом Ctrl строки выделялись, и не снималось выделение при повторном клике на одну из выделенных строк. То есть — зажали Ctrl — > кликнули на строку с индексом 0 -> она стала синей — > и сколько бы мы на нее не кликали синей она и останется, пока нажат Ctrl. Как сделать? Сейчас у меня так :

Но мне нужно запретить снимать выделение со строки если нажат Ctrl.

1 ответ 1

Я придумал такой велосипед.

Добавьте поле формы:

Это будет список выделенных в текущий момент строк.

Подпишите DataGridView на событие SelectionChanged и разместите в нём следующий код:

Логика такая. При нажатой клавише Control , если выделенных строк больше, чем в нашем списке, то добавляем в него все эти выделенные строки. Если выделенных строк стало меньше (то есть пользователь кликнул по ранее выделенной строке), то восстанавливаем выделение из нашего списка.

Когда выделение строк меняется без нажатой клавиши Control , очищаем наш список.

Оцените статью