Индекс текущей выбранной строки в DataGridView

96

Это так просто. Как мне получить индекс текущего выбранного Rowиз a DataGridView? Мне не нужен Rowобъект, мне нужен индекс (0 .. n).

Эрике
источник

Ответы:

166

Есть RowIndexсвойство для CurrentCellсвойства для DataGridView.

datagridview.CurrentCell.RowIndex

Обработайте SelectionChangedсобытие и найдите индекс выбранной строки, как указано выше.

Флетчер
источник
1
Отлично. Это кажется самым простым / быстрым даже для SelectedRows [0] .Index. Было бы это хорошим предположением?
ErikE
Хм, я не думал о выборе нескольких строк. Я не уверен в поведении текущей ячейки в этом случае.
fletcher
1
Если это что-то вроде Excel, выбранный список может состоять из многих строк / столбцов, но есть только одна текущая / активная ячейка. Меня интересует только текущая строка, так что все должно быть хорошо.
ErikE
18
Я знаю, что этот пост старый, но он может помочь кому-то другому: CurrentCellвозвращает «активную» ячейку, которая отличается от «Выбрано». Даже если выбрано несколько строк, активная ячейка может быть где-то еще, и может быть только одна активная ячейка
Люк Марлин
3
Кроме того, даже если вы отмените выбор всего в представлении сетки данных, одна из ячеек будет по-прежнему активна, поэтому вы не можете полагаться на то, что это значение равно нулю или что-то в этом роде, поскольку не было выбранных строк.
Дэниел Грей
37

Используйте свойство Index в коллекции SelectedRows вашего DGV:

int index = yourDGV.SelectedRows[0].Index;
Джей Риггз
источник
Как думаете, это лучше или DGV.CurrentCell.RowIndex?
ErikE
4
Текущая ячейка может быть не выбрана в некоторых случаях, поэтому это лучший способ.
Little Endian
1
@thethuthinnang, когда вы не выбрали ни одной строки, решение @JayRiggs выдаст ошибку индекса два. Вы бы лучше завернул сif
Allan Ruin
7
dataGridView1.SelectedRows[0].Index;

Или, если вы хотите использовать LINQ и получить индекс всех выбранных строк, вы можете сделать:

dataGridView1.SelectedRows.Select(r => r.Index);
Джастин Нисснер
источник
Полезно (IndexOf еще не был "на моем радаре"), но обходным путем, поскольку получение строки не требуется. Метод .Index - это то, что я искал.
ErikE
3

попробуйте, это сработает ... он даст вам индекс выбранного индекса строки ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());
Санджив
источник
2

попробуй это

bool flag = dg1.CurrentRow.Selected;

if(flag)
{
  /// datagridview  row  is  selected in datagridview rowselect selection mode

}
else
{
  /// no  row is selected or last empty row is selected
}
HyperNova
источник
Спасибо, именно то, что мне нужно, чтобы определить, какое скрытое значение выбранной строки при использовании элемента управления, не связанного с представлением сетки.
orgtigger
2

Я изменил ответ @JayRiggs, и это работает. Вам нужен, ifпотому что иногда SelectedRows может быть пустым, поэтому операция индекса вызовет исключение.

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}
Аллан Руин
источник
1

Попробуйте DataGridView.CurrentCellAddress .

Возвращает: точка, представляющая индексы строки и столбца текущей активной ячейки.

EG Выберите первый столбец и пятую строку, и вы вернетесь: Point (X = 1, Y = 5)

Киланаш
источник
PS с тех пор, как я попросил индекс строки, в наших отношениях было бы меньше DataGridView.CurrentCellAddress.Y
шансов,
Я думаю, что на данный момент все эти ответы верны, только вам решать, какой из них вы хотите выбрать, наиболее подходящий для ваших целей. Я бы посоветовал набрать различные реализации и посмотреть на IL в .NET Reflector ( red-gate.com/products/reflector ), если вы действительно хотите увидеть, какой код генерируется для каждой, но, как многие скажут, это микро -оптимизация. Это действительно зависит от того, что наиболее ясно в намерениях. PS Примечание взято, чтобы быть более понятным в будущем.
Киланаш
1

Попытайся:

int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
MessageBox.Show("Current Row Index is = " + rc.ToString());

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

Рааз Сальяни
источник
3
Спасибо за участие, но ваш ответ является дубликатом выбранного (и получившего наибольшее количество голосов) ответа, который дал решение datagridview.CurrentCell.RowIndex. Приношу свои извинения - я рекомендую удалить этот пост как полную копию.
ErikE
0

Вы можете попробовать этот код:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;
субханкар
источник
0

Я использовал, если щелкнули получить значение строки:

private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e){
    int rowIndex;
    //rowIndex = e.RowIndex; //Option 1
    //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
    rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3
}
Хан Нгуен
источник
-1

Попробуйте следующее:

int myIndex = MyDataGrid.SelectedIndex;

Это даст индекс строки, которая выбрана в данный момент.

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

P_Fitz
источник