Indeks aktualnie wybranego wiersza w DataGridView

96

To takie proste. Jak uzyskać indeks aktualnie wybranego Rowpliku DataGridView? Nie chcę Rowobiektu, chcę indeks (0 .. n).

ErikE
źródło

Odpowiedzi:

165

Istnieje RowIndexwłaściwość dla CurrentCellwłaściwości DataGridView.

datagridview.CurrentCell.RowIndex

Obsługuj SelectionChangedzdarzenie i znajdź indeks wybranego wiersza, jak powyżej.

fletcher
źródło
1
Idealny. Wydaje się to najprostsze / najszybsze, nawet w przypadku SelectedRows [0] .Index. Czy to byłoby dobre założenie?
ErikE
Hmm, nie myślałem o wybraniu wielu wierszy. Nie jestem pewien zachowania obecnej komórki w tym przypadku.
fletcher
1
Jeśli jest to coś w rodzaju Excela, wybrana lista może zawierać wiele wierszy / kolumn, ale jest tylko jedna bieżąca / aktywna komórka. Dbam tylko o bieżący wiersz, więc to powinno wystarczyć.
ErikE
18
Wiem, że ten post jest stary, ale może pomóc komuś innemu: CurrentCellzwraca „aktywną” komórkę, która różni się od „Wybrano”. Nawet jeśli zaznaczonych jest wiele wierszy, aktywna komórka może znajdować się gdzie indziej, a może być tylko jedna aktywna komórka
Luke Marlin
3
A także, nawet jeśli odznaczysz wszystko w widoku siatki danych, jedna z komórek będzie nadal aktywna, więc nie możesz polegać na tym, że jest zerowa lub coś podobnego, ponieważ nie ma wybranych wierszy.
Daniel Gray,
37

Użyj właściwości Index w kolekcji SelectedRows DGV:

int index = yourDGV.SelectedRows[0].Index;
Jay Riggs
źródło
Czy uważasz, że to jest lepsze, czy DGV.CurrentCell.RowIndex?
ErikE
4
Bieżąca komórka może nie być wybrana w niektórych przypadkach, więc jest to lepszy sposób.
Little Endian
1
@thethuthinnang jeśli nie wybrałeś żadnego wiersza, rozwiązanie @JayRiggs zgłosi błąd indeksu dwa. Lepiej zapakuj go wif
Allan Ruin
7
dataGridView1.SelectedRows[0].Index;

Lub jeśli chcesz użyć LINQ i uzyskać indeks wszystkich wybranych wierszy, możesz zrobić:

dataGridView1.SelectedRows.Select(r => r.Index);
Justin Niessner
źródło
Pomocne (IndexOf nie było jeszcze „na moim radarze”), ale rondo, ponieważ uzyskanie wiersza nie jest konieczne. Metoda .Index jest tym, czego szukałem.
ErikE
3

spróbuj to zadziała ... da ci indeks wybranego indeksu wiersza ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());
sanjeev
źródło
2

Spróbuj tego

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
źródło
Dzięki, dokładnie to, czego potrzebowałem, aby określić, jaka jest ukryta wartość wybranego wiersza, gdy używam kontrolki, która nie była skojarzona z widokiem siatki.
orgtigger
2

Zmodyfikowałem odpowiedź @JayRiggs i to działa. Potrzebujesz, ifponieważ czasami SelectedRows mogą być puste, więc operacja indeksu zgłosi wyjątek.

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}
Allan Ruin
źródło
1

Wypróbuj DataGridView.CurrentCellAddress .

Zwraca: Punkt, który reprezentuje indeksy wierszy i kolumn aktualnie aktywnej komórki.

EG Wybierz pierwszą kolumnę i piąty rząd, a otrzymasz: Punkt (X = 1, Y = 5)

Kilanash
źródło
PS, ponieważ poprosiłem o indeks wierszy, sprawy w naszym związku byłyby mniej DataGridView.CurrentCellAddress.Y
trudne
Myślę, że w tym momencie wszystkie te odpowiedzi są poprawne, tylko od Ciebie zależy, która z nich jest najczystsza do Twoich celów. Sugerowałbym wpisanie różnych implementacji i przyjrzenie się IL w .NET Reflector ( red-gate.com/products/reflector ), jeśli naprawdę chcesz zobaczyć, jaki kod jest generowany dla każdej z nich, ale jak wielu powie, to jest mikro -optymalizacja. To naprawdę zależy od tego, co jest najbardziej jasne w zamiarze. PS Uwaga uważana za bardziej przejrzystą w przyszłości.
Kilanash
1

Spróbuj:

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

Mam nadzieję, że ci to pomoże.

Raaz Salyani
źródło
3
Dziękuję za włamanie, ale Twoja odpowiedź jest duplikatem wybranej (i najbardziej opiniotwórczej odpowiedzi), która dała rozwiązanie datagridview.CurrentCell.RowIndex. Przepraszam - zamierzam zalecić usunięcie tego posta jako pełnego duplikatu.
ErikE
0

Możesz wypróbować ten kod:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;
subhankar
źródło
0

Użyłem, jeśli kliknięto pobierz wartość wiersza:

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
}
Han Nguyen
źródło
-1

Spróbuj wykonać następujące czynności:

int myIndex = MyDataGrid.SelectedIndex;

To daje indeks wiersza, który jest aktualnie wybrany.

Mam nadzieję że to pomoże

P_Fitz
źródło