Index de la ligne actuellement sélectionnée dans DataGridView

96

C'est si simple. Comment puis-je obtenir l'index du actuellement sélectionné Rowd'un DataGridView? Je ne veux pas l' Rowobjet, je veux l'index (0 .. n).

ErikE
la source

Réponses:

165

Il existe la RowIndexpropriété de la CurrentCellpropriété du DataGridView.

datagridview.CurrentCell.RowIndex

Gérez l' SelectionChangedévénement et recherchez l'index de la ligne sélectionnée comme ci-dessus.

fletcher
la source
1
Parfait. Cela semble le plus simple / le plus rapide, même sur SelectedRows [0] .Index. Serait-ce une bonne hypothèse?
ErikE
Hmm, je n'ai pas pensé à la sélection de plusieurs lignes. Je ne suis pas sûr du comportement de la cellule actuelle dans ce cas.
fletcher
1
Si cela ressemble à Excel, la liste sélectionnée peut comporter plusieurs lignes / colonnes, mais il n'y a qu'une seule cellule actuelle / active. Je ne me soucie que de la ligne actuelle, donc cela devrait bien fonctionner.
ErikE
18
Je sais que ce message est ancien, mais il pourrait aider quelqu'un d'autre: CurrentCellrenvoie la cellule "active", qui est différente de "Sélectionné". Même s'il y a plusieurs lignes sélectionnées, la cellule active peut être ailleurs et il ne peut y avoir qu'une seule cellule active
Luke Marlin
3
Et aussi, même si vous désélectionnez tout dans la vue de la grille de données, l'une des cellules sera toujours active, vous ne pouvez donc pas vous fier à ce que ce soit nul ou quelque chose comme ça car aucune ligne n'est sélectionnée.
Daniel Gray
37

Utilisez la propriété Index dans la collection SelectedRows de votre DGV:

int index = yourDGV.SelectedRows[0].Index;
Jay Riggs
la source
Pensez-vous que c'est mieux ou DGV.CurrentCell.RowIndex?
ErikE
4
La cellule actuelle peut ne pas être sélectionnée dans certains cas, c'est donc la meilleure façon de procéder.
Little Endian
1
@thethuthinnang lorsque vous n'avez sélectionné aucune ligne, la solution de @JayRiggs lancera l'erreur d'index deux. Vous feriez mieux de l'envelopper avec unif
Allan Ruin
7
dataGridView1.SelectedRows[0].Index;

Ou si vous souhaitez utiliser LINQ et obtenir l'index de toutes les lignes sélectionnées, vous pouvez faire:

dataGridView1.SelectedRows.Select(r => r.Index);
Justin Niessner
la source
Utile (IndexOf n'était pas encore vraiment "sur mon radar"), mais rond-point car obtenir la ligne n'est pas nécessaire. La méthode .Index est ce que je recherchais.
ErikE
6
dataGridView1.SelectedRows[0].Index;

Retrouvez ici tout sur datagridview C # tutoriel datagridview

Lynda

Lyndaeldo
la source
3

essayez ceci, cela fonctionnera ... cela vous donnera l'index de l'index de ligne sélectionné ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());
Sanjeev
la source
2

essaye ça

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
la source
Merci, exactement ce dont j'avais besoin pour déterminer la valeur cachée d'une ligne sélectionnée lors de l'utilisation d'un contrôle qui n'était pas associé à la grille.
orgtigger
2

J'ai modifié la réponse de @JayRiggs, et cela fonctionne. Vous en avez besoin ifcar parfois, SelectedRows peut être vide, l'opération d'indexation lèvera une exception.

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}
Ruine d'Allan
la source
1

Essayez DataGridView.CurrentCellAddress .

Renvoie: un point qui représente les index de ligne et de colonne de la cellule actuellement active.

EG Sélectionnez la première colonne et la cinquième ligne, et vous reviendrez: Point (X = 1, Y = 5)

Kilanash
la source
PS depuis que j'ai demandé l'index des lignes, les choses auraient été moins difficiles dans notre relation si vous aviez dit DataGridView.CurrentCellAddress.Y... :)
ErikE
Je pense qu'à ce stade, toutes ces réponses sont valables, c'est à vous de décider laquelle vous voulez choisir la plus propre à vos fins. Je suggérerais de taper les différentes implémentations et de regarder l'IL dans .NET Reflector ( red-gate.com/products/reflector ) si vous voulez vraiment voir quel code est généré pour chacune, mais comme beaucoup le diront, c'est micro -optimisation. C'est vraiment ce qui est le plus clair dans l'intention. PS Note prise pour être plus claire à l'avenir.
Kilanash
1

Essayez-le:

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

J'espère que cela vous aidera.

Raaz Salyani
la source
3
Merci de votre contribution, mais votre réponse est un double de la réponse sélectionnée (et la plus votée) qui a donné la solution datagridview.CurrentCell.RowIndex. Mes excuses, je vais recommander que ce message soit supprimé en tant que duplicata complet.
ErikE
0

Vous pouvez essayer ce code:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;
subhankar
la source
0

J'ai utilisé si on clique sur obtenir la valeur de la ligne:

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
la source
-1

Essayez ce qui suit:

int myIndex = MyDataGrid.SelectedIndex;

Cela donnera l'index de la ligne actuellement sélectionnée.

J'espère que cela t'aides

P_Fitz
la source