#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
}
}
- Удалите все предыдущие выделения.
- Перебирайте строки, которые необходимо выделить в вашей сетке.
- Получите их дескрипторы строк из сетки (обратите внимание, что здесь сетка уже обновлена новыми строками)
- Проверка, является ли дескриптор строки допустимым или нет.
- Когда допустимый дескриптор строки, выберите его.
Где 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;
Надеюсь, это поможет!