Indice della riga attualmente selezionata in DataGridView


96

È così semplice. Come ottengo l'indice degli elementi attualmente selezionati Rowdi a DataGridView? Non voglio l' Rowoggetto, voglio l'indice (0 .. n).

Risposte:


165

C'è la RowIndexproprietà per la CurrentCellproprietà per DataGridView.

datagridview.CurrentCell.RowIndex

Gestisci l' SelectionChangedevento e trova l'indice della riga selezionata come sopra.


1
Perfetto. Questo sembra più semplice / veloce, anche su SelectedRows [0] .Index. Sarebbe una buona ipotesi?
ErikE

Hmm, non ho pensato alla selezione di più righe. Non sono sicuro del comportamento della cella corrente in questo caso.
fletcher

1
Se è qualcosa di simile a Excel, l'elenco selezionato può essere molte righe / colonne, ma c'è solo una cella corrente / attiva. Mi interessa solo la riga corrente, quindi dovrebbe andare bene.
ErikE

18
So che questo post è vecchio, ma potrebbe aiutare qualcun altro: CurrentCellrestituisce la cella "attiva", che è diversa da "Selezionato". Anche se sono state selezionate più righe, la cella attiva potrebbe essere da qualche altra parte e può esserci una sola cella attiva
Luke Marlin

3
Inoltre, anche se deselezioni tutto nella visualizzazione della griglia dei dati, una delle celle sarà ancora attiva, quindi non puoi fare affidamento sul fatto che sia nulla o qualcosa del genere perché non ci sono righe selezionate.
Daniel Gray,

37

Utilizza la proprietà Index nella raccolta SelectedRows di DGV:

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

Pensi che questo sia meglio o DGV.CurrentCell.RowIndex?
ErikE

4
La cella corrente potrebbe non essere selezionata in alcuni casi, quindi questo è il modo migliore per procedere.
Little Endian

1
@thethuthinnang quando non hai selezionato nessuna riga, la soluzione di @JayRiggs genererà l'errore di indice due. Faresti meglio a incartarlo con unif
Allan Ruin

7
dataGridView1.SelectedRows[0].Index;

Oppure, se volessi usare LINQ e ottenere l'indice di tutte le righe selezionate, potresti fare:

dataGridView1.SelectedRows.Select(r => r.Index);

Utile (IndexOf non era ancora "sul mio radar"), ma non è necessario fare una rotatoria poiché ottenere la riga. Il metodo .Index è quello che stavo cercando.
ErikE


3

prova questo funzionerà ... ti darà l'indice dell'indice di riga selezionato ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());

2

prova questo

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
}

Grazie, esattamente quello che mi serviva per determinare quale fosse il valore nascosto di una riga selezionata quando si utilizzava un controllo che non era associato al gridview.
orgtigger

2

Ho modificato la risposta di @JayRiggs e funziona. È necessario ifperché a volte SelectedRows può essere vuoto, quindi l'operazione sull'indice genererà un'eccezione.

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}

1

Prova DataGridView.CurrentCellAddress .

Restituisce: un punto che rappresenta gli indici di riga e colonna della cella attualmente attiva.

Ad esempio, seleziona la prima colonna e la quinta riga e tornerai indietro: Punto (X = 1, Y = 5)


PS da quando ho chiesto l'indice di riga, le cose sarebbero state meno difficili nella nostra relazione se avessi detto DataGridView.CurrentCellAddress.Y... :)
ErikE

Penso che a questo punto tutte queste risposte siano valide, dipende solo da te quale vuoi scegliere e che è più pulita per i tuoi scopi. Suggerirei di digitare le diverse implementazioni e di guardare l'IL in .NET Reflector ( red-gate.com/products/reflector ) se vuoi davvero vedere quale codice viene generato per ciascuna, ma come molti diranno, è micro -ottimizzazione. Dipende davvero da ciò che è più chiaro nelle intenzioni. PS Nota presa per essere più chiara in futuro.
Kilanash

1

Provalo:

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

Spero ti possa aiutare.


3
Grazie per aver contribuito, ma la tua risposta è un duplicato della risposta selezionata (e più votata) che ha fornito la soluzione datagridview.CurrentCell.RowIndex. Mi scuso. Raccomanderò di eliminare questo post come duplicato completo.
ErikE

0

Puoi provare questo codice:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;

0

Ho usato se si fa clic su Ottieni valore riga:

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

Prova quanto segue:

int myIndex = MyDataGrid.SelectedIndex;

Questo darà l'indice della riga attualmente selezionata.

Spero che questo ti aiuti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.