Ceci est quelque chose qui m'a dérangé pendant un certain temps car il est facilement résolu mais pas souhaitable.DataGridView.Column (ColumnName as String) donne l'erreur "Référence d'objet non définie sur une instance d'un objet"
J'ai un DataGridView qui a 5 colonnes. Le premier est appelé ID.
En vb.net la ligne suivante donne une erreur « référence d'objet non définie à une instance d'un objet »:
dgvJobs.Columns("ID").Visible = False ' ERROR
dgvJobs.Columns(0).Visible = False ' OK
De toute évidence en utilisant le nom est bien mieux qu'une valeur codée en dur pour faire référence à la colonne mais je me demande s'il y a quelque chose que je peux faire pour que cela fonctionne correctement?
La source de données datagridview est un contrôle BindingSource dont la source de données est un ensemble de données.
EDIT: Sur la base de la réponse que j'ai créé la fonction suivante qui fait exactement comme je l'ai besoin:
Private Function GetColName(ByVal name As String, ByRef dgv As DataGridView) As Integer
Dim retVal As Integer
For Each col As DataGridViewColumn In dgv.Columns
If col.HeaderText = name Then
retVal = col.Index
Exit For
End If
Next
Return retVal
End Function
useage:
dgvJobs.Columns(GetColName("ID", dgvJobs)).Visible = False
Notez également, la classe DataGridViewColumn possède une propriété "HeaderText" qui indique le nom à afficher sur la grille! –