Індекс поточно вибраного рядка в DataGridView


96

Це так просто. Як отримати індекс поточного вибраного Rowз DataGridView? Я не хочу Rowоб'єкт, я хочу індекс (0 .. n).

Відповіді:


165

Існує RowIndexвластивість для CurrentCellвласності для DataGridView.

datagridview.CurrentCell.RowIndex

Обробіть SelectionChangedподію та знайдіть індекс вибраного рядка, як зазначено вище.


1
Ідеально. Це здається найпростішим / найшвидшим, навіть над SelectedRows [0] .Index. Це було б гарне припущення?
ЕрікЕ

Хм, я не думав про те, щоб було вибрано кілька рядків. Я не впевнений у поведінці поточної комірки в цьому випадку.
флетчер

1
Якщо це щось на зразок Excel, вибраний список може бути безліччю рядків / стовпців, але є лише одна поточна / активна комірка. Мене дбає лише про поточний рядок, щоб це мало добре.
ЕрікЕ

18
Я знаю, що ця публікація стара, але вона може допомогти іншому: CurrentCellповертає "активну" клітинку, яка відрізняється від "Вибраної". Навіть якщо вибрано кілька рядків, активна комірка може бути деінде, і там може бути лише одна активна комірка
Люк Марлін

3
А також, навіть якщо ви знятимете всі з подання сітки даних, одна з комірок все одно буде активною, тому ви не можете покладатися на те, що це нуль або щось подібне, оскільки не вибрано рядків.
Деніел Грей

37

Використовуйте властивість Index у колекції ваших вибраних рядків DGV:

int index = yourDGV.SelectedRows[0].Index;

Ви вважаєте, що це краще або DGV.CurrentCell.RowIndex?
ErikE

4
Поточну комірку в деяких випадках може бути не вибрано, тому це кращий шлях.
Маленький Ендіан,

1
@thethuthinnang, якщо ви не вибрали жодного ряду, рішення @JayRiggs видасть помилку в індексі дві. Краще оберніть цеif
Аллан Руїна

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 Виберіть перший стовпець і п'ятий ряд, і ви повернетеся: Точка (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

Я використовував, якщо натискається значення рядка get:

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.