DataGridView.La colonne(ColumnName comme une Chaîne de caractères) donne une erreur “la référence d'Objet n'est pas définie à une instance d'un objet”
C'est quelque chose qui a été m'énerve pour un temps, car il est facilement corrigé, mais pas souhaitable.
J'ai un DataGridView qui a 5 colonnes. La première est appelée ID.
Dans vb.net la ligne suivante donne une erreur "la référence d'Objet n'est pas 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 beaucoup mieux qu'une codés en dur la valeur de référence de la colonne, mais vous vous demandez s'il ya quelque chose que je peux faire pour que tout cela fonctionne correctement?
Le datagridview source de données est BindingSource de contrôle avec la source de données étant un ensemble de données.
EDIT: en Fonction de la réponse, j'ai créé la fonction suivante qui fait exactement ce que j'ai besoin de:
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
OriginalL'auteur Belliez | 2010-01-07
Vous devez vous connecter pour publier un commentaire.
Deux conseils:
1 - Par défaut, les Winforms designer crée un objet dans vos formulaires de Classe pour chaque colonne qui existe dans un DataGridView. Donc, si vous avez une colonne nommée MyIdColumn, par exemple, vous devriez être en mesure d'accéder à la colonne sous la forme d'un code comme ceci:
Si vous souhaitez accéder à un élément de la DataGridView, vous pourriez faire quelque chose comme ceci:
À l'aide de cette astuce, si le nom de la colonne changements, il n'y a pas de problème parce que vous faites référence à la colonne directement au lieu d'une chaîne de caractères représentant le nom d'une colonne qui pourrait changer.
2 - Votre GetColName méthode pourrait être mieux; je voudrais la transformer en une méthode d'extension:
Utilisation:
Beaucoup plus agréable de l'OMI!
OriginalL'auteur Meta-Knight
Peut-être la colonne n'est pas appelé à ce que vous pensez que c'est?
Avez-vous vérifié les Colonnes(0).Nom de la propriété à vérifier?
Il aurait pu être appelé "tablename_ID" ou quelque chose par le BindingSource
Je vais ajouter le code pour cette réponse
OriginalL'auteur codeulike
Public Class Form2
Privé de la liste Comme une Liste(D'une Personne)
Private Sub Form2_Load(ByVal sender as System.Object, ByVal e as System.EventArgs) Handles MyBase.Charge
CreateDGV()
PopulatingDGV()
Fin De La Classe
OriginalL'auteur budh sagar