2010-08-26 3 views

Répondre

123

Il existe la propriété RowIndex pour la propriété CurrentCell pour DataGridView.

datagridview.CurrentCell.RowIndex 

gérer l'événement SelectionChanged et trouver l'index de la ligne sélectionnée comme ci-dessus.

+1

Parfait. Cela semble plus simple/plus rapide, même sur SelectedRows [0] .Index. Serait-ce une bonne hypothèse? – ErikE

+0

Hum, je ne pensais pas à la sélection de plusieurs lignes. Je ne suis pas sûr du comportement de la cellule actuelle dans ce cas. – fletcher

+1

Si c'est quelque chose comme Excel, la liste sélectionnée peut être plusieurs lignes/colonnes, mais il n'y a qu'une seule cellule active/active. Je me soucie seulement de la rangée actuelle, donc ça devrait aller. – ErikE

6
dataGridView1.SelectedRows[0].Index; 

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

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

Utile (IndexOf était pas vraiment « sur mon radar » encore), mais rond-point depuis l'obtention de la ligne n'est pas nécessaire. La méthode .Index est ce que je cherchais. – ErikE

31

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

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

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 solution. – AbleArcher

+0

@thethuthinnang Lorsque vous n'avez sélectionné aucune ligne, la solution @JayRiggs lancera l'erreur d'index deux. Tu ferais mieux de l'emballer avec un «si» –

1

Essayez DataGridView.CurrentCellAddress. Renvoie: Un point qui représente les index de ligne et de colonne de la cellule actuellement active.

E.G. Sélectionnez la première colonne et la cinquième rangée, et vous reviendrez: Point (X = 1, Y = 5)

+0

P.S. depuis que j'ai demandé l'index de la ligne, les choses auraient été moins rocailleuses dans notre relation si vous aviez dit 'DataGridView.CurrentCellAddress.Y' ... :) – ErikE

+0

Je pense qu'à ce stade toutes ces réponses sont valides, c'est juste en haut à vous, celui que vous voulez choisir qui est le plus propre à vos fins. Je suggère de taper les différentes implémentations et en regardant l'IL dans. NET Reflector (http://www.red-gate.com/products/reflector/) si vous voulez vraiment voir quel code est généré pour chacun, mais comme beaucoup le diront, c'est la micro-optimisation. C'est vraiment ce qui est le plus clair dans l'intention. PS Note prise pour être plus clair à l'avenir. – Kilanash

3

Essayez ceci cela fonctionnera ... il vous donnera l'index de l'index de ligne sélectionné .. .

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

essayer cette

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 
} 
+0

Merci, exactement ce dont j'avais besoin pour déterminer quelle est 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

-1

les opérations suivantes:

int myIndex = MyDataGrid.SelectedIndex; 

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

Hope this helps

0

J'ai modifié la réponse de @JayRiggs, et cela fonctionne. Vous avez besoin du if car parfois les SelectedRows peuvent être vides, donc l'opération d'index lèvera une exception.

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

Vous pouvez essayer ce code:

int columnIndex = dataGridView.CurrentCell.ColumnIndex; 
int rowIndex = dataGridView.CurrentCell.RowIndex; 
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.

+2

Merci d'avoir copié, mais votre réponse est un doublon de la réponse sélectionnée (et la plus mise à jour) qui a donné la solution 'datagridview.CurrentCell.RowIndex'. Mes excuses - je vais recommander que ce message soit supprimé en tant que copie complète. – ErikE

0

J'utilisé si get valeur de la ligne est cliqué:

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 
} 
Questions connexes