Программный выбор строки в DataGridView

110

Как я могу программно выбрать определенный диапазон строк в среде DataGridViewвыполнения?

Нагендра
источник

Ответы:

129

Не проверял, но думаю, вы можете сделать следующее:

dataGrid.Rows[index].Selected = true;

или вы можете сделать следующее (но опять же: не проверено):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
Кристоф Финк
источник
Остерегайтесь, если у вас есть DataGridView read-only- тогда SelectedRows.Clear()работать не будет.
Derek W
14
Вместо SelectedRows.Clear () используйте метод ClearSelection () экземпляра datagridview
Фуркан
1
@Furkan: Это не то же самое. Очищаются SelectedRows.Clear()только выбранные строки, но ClearSelection()также и столбцы => выбор столбцов теряется ...
Кристоф Финк
17
добавьте одну строчку кодаdataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
Timeless
2
@Timeless: событие SelectionChanged, похоже, не запускается при проверке вашего предложения.
user2430797
34

В Visual Basic сделайте это, чтобы выбрать строку в DataGridView; выбранная строка будет выделена цветом, но обратите внимание, что позиция курсора не изменится:

Grid.Rows(0).Selected = True

Сделайте это, измените положение курсора:

Grid.CurrentCell = Grid.Rows(0).Cells(0)

Объединение строк выше поместит курсор и выберет строку. Это стандартная процедура для фокусировки и выбора строки в DataGridView:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True
Родриго Т.
источник
Grid.Rows (0) .Cells (0) очень полезен в случае, если данные сетки длиннее, чем область отображения сетки. Упомянутый выше порядок не является обязательным, вы можете смахнуть код для выбора строки / ячейки [источник: лично протестировано].
BiLaL
Как переместить сетку в выбранное место? Строка выбрана, но позиция сетки не в выбранной строке. При прокрутке вручную отображается выбранная строка. Как заставить сетку прокручиваться?
FrenkyB
1
Смотрите, что: FirstDisplayedScrollingRowIndex
Родриго Т.
13
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
IM999MaxBonum
источник
0
 <GridViewName>.ClearSelection(); ----------------------------------------------------1
 foreach(var item in itemList) -------------------------------------------------------2
 {
    rowHandle =<GridViewName>.LocateByValue("UniqueProperty_Name", item.unique_id );--3
    if (rowHandle != GridControl.InvalidRowHandle)------------------------------------4
    {
        <GridViewName>.SelectRow(rowHandle);------------------------------------ -----5
    }
  }
  1. Очистить весь предыдущий выбор.
  2. Прокрутите строки, которые необходимо выбрать в вашей сетке.
  3. Получите их дескрипторы строк из сетки (обратите внимание, что сетка уже обновлена ​​новыми строками)
  4. Проверка допустимости дескриптора строки.
  5. Когда действительный дескриптор строки, выберите его.

Где itemList - это список строк, которые нужно выбрать в представлении сетки.

IFlyHigh
источник
0

Попробуй это:

datagridview.Rows[currentRow].Cells[0];
Ганеш Камат - "Кодовое безумие"
источник
datagridview.Rows[currentRow].Cells[0] Получает ... ячейку в указанном месте индекса. Как это выбрать конкретный диапазон строк в соответствии с запросом в вопросе?
dbc
-1

При установке выбранной строки DataGridView во время загрузки рассмотрите возможность обработки этого в событии DataBindingComplete, поскольку по умолчанию она может быть перезаписана.

Дэниел Ом
источник
-1

Попробуй это:

DataGridViewRow row = dataGridView1.Rows[index row you want];
dataGridView1.CurrentRow = row;

Надеюсь на эту помощь!

lecntp
источник