Индекс текущей выбранной строки в 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
}

Спасибо, именно то, что мне нужно, чтобы определить, какое скрытое значение выбранной строки при использовании элемента управления, не связанного с представлением сетки.
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;

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.