Выбор строки в DataGridView программно

#c# #.net #winforms #datagridview

#c# #.net #winforms #datagridview

Вопрос:

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

Ответ №1:

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

 dataGrid.Rows[index].Selected = true;
  

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

 dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
  

Комментарии:

1. Будьте осторожны, если ваш DataGridView read-only — то SelectedRows.Clear() не будет работать.

2. Вместо выбранных строк. Clear() использует метод ClearSelection() экземпляра datagridview

3. @Furkan: Это не делает то же самое. С помощью SelectedRows.Clear() очищаются только выбранные строки, но с помощью ClearSelection() также теряются столбцы => выбранные столбцы…

4. добавьте одну строку кода dataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];

5. @Timeless: событие SelectionChanged, похоже, не срабатывает при тестировании вашего предложения.

Ответ №2:

В 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
  

Комментарии:

1. Сетка.Строки(0). Ячейки (0) очень полезны в случае, если данные таблицы длиннее, чем область отображения таблицы. Порядок, упомянутый выше, не является обязательным, вы можете провести пальцем по коду для выбора строки / ячейки [ источник: Лично проверено].

2. Как переместить сетку в выбранное положение? Строка выбрана, но позиция сетки отсутствует в выбранной строке. При прокрутке вручную отображается выбранная строка. Как заставить сетку прокручиваться?

3. Смотрите, что: FirstDisplayedScrollingRowIndex

4. Убедитесь, что любой столбец, на который вы ссылаетесь, .Cells(x) является Columns(x).Visible = True , или это приведет к ошибке. Используйте DataGridView. Сначала отображается , чтобы найти первую строку.

Ответ №3:

 DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
  

Ответ №4:

  <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 — это список строк, которые должны быть выбраны в виде таблицы.

Ответ №5:

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

 datagridview.Rows[currentRow].Cells[0];
  

Комментарии:

1. datagridview.Rows[currentRow].Cells[0] Возвращает … ячейка в указанном местоположении индекса. Как это позволяет выбрать определенный диапазон строк, как указано в вопросе?

Ответ №6:

Вы можете использовать метод выбора, если у вас есть источник данных: http://msdn.microsoft.com/en-us/library/b51xae2y(v=vs.71).aspx

Или используйте linq, если у вас есть объекты в вашем источнике данных

Ответ №7:

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

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

Надеюсь, это поможет!