2010-12-01 14 views
2

J'essaie d'accéder au nom de la colonne de la ligne sélectionnée dans le contrôle DataGridView sous forme de fenêtres, mais je suis en train de ArgumenOutOfRange exception du code ci-dessous:ArgumentOutOfRange Exception en C#

MessageBox.Show(dataGridView1.SelectedColumns[dataGridView1.CurrentCell.ColumnIndex].ToString()); 

Production:

ArgumentOutOfRangeException was unhandled 

Index was out of range. Must be non-negative and less than the size of the collection. 
Parameter name: index 

Pourriez-vous me dire comment puis-je surmonter cette erreur?

Répondre

0

La collection DataGridView.SelectedColumns est une collecte séparée des DataGridView.Columns et peut avoir un ensemble différent (un sous-ensemble) des colonnes.

Par exemple, si vous avez une vue 5 de la colonne, et le troisième et le quatrième sont sélectionnés, puis

DataGridView.SelectedColumns.Count == 2 
DataGridView.Columns.Count == 5 

et que vous utilisez la quatrième colonne (index 3) votre code devient

DataGridView.SelectedColumns[3] 

qui explose (à juste titre) avec un IndexOutOfBounds. En résumé, dans votre cas, vous devriez utiliser la propriété Columns, et non les SelectedColumns.

+0

Merci pour votre réponse. – SauDard

0

La propriété ColumnIndex peut retourner -1 (à partir de la documentation):

L'index de la colonne qui contient la cellule ; -1 si la cellule n'est pas contenue dans une colonne.

Cela pourrait-il être le cas pour vous?

1

Si je ne me trompe pas, alors probablement vous devriez obtenir la valeur de colonne d'une collection Columns et non de la collection SelectedColumns.

dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex] 
4

SelectedColumns est une liste qui ne contient que les colonnes sélectionnées (oui, voilà comment cela fonctionne). Cette taille de liste est donc différente de la taille de la liste de propriétés Columns (ce que vous voulez, évidemment).

MessageBox.Show(dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].ToString()); 
+0

+1 Battez-moi = = – bitxwise