La référence d'objet n'est pas définie à une instance d'un objet
Th3Rimas
-
Utilisateur anonyme -
Utilisateur anonyme -
bonjour,
je développe une application sur Ado.net et j'utilise la technologie ADO( le mode deconnecté et Link TO Sql) et j'ai rencontré un problème : "la référence d'objet n'est pas définie à une instance d'un objet"
voilà le code que j'ai ecrit:
le message s'affiche au niveau de ce ligne là:
--->> d.codeart = dataGridView1.Rows[i].Cells[0].Value.ToString();
je développe une application sur Ado.net et j'utilise la technologie ADO( le mode deconnecté et Link TO Sql) et j'ai rencontré un problème : "la référence d'objet n'est pas définie à une instance d'un objet"
voilà le code que j'ai ecrit:
//========================Enregistrer des lignes de commande dans la table detail for (int i = 0; i <= dataGridView1.Rows.Count - 1; ++i) { detail d = new detail(); d.NumCom = textBox1.Text; d.codeart = dataGridView1.Rows[i].Cells[0].Value.ToString(); d.Qte = int.Parse(dataGridView1.Rows[i].Cells[3].Value.ToString()); l.details.InsertOnSubmit(d);
le message s'affiche au niveau de ce ligne là:
--->> d.codeart = dataGridView1.Rows[i].Cells[0].Value.ToString();
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- La référence d'objet n'est pas définie à une instance d'un objet
- Vente objet occasion entre particulier - Guide
- Identifier un objet à partir d'une photo - Guide
- Objet interdit en cabine ryanair - Guide
- Mesurer un objet - Guide
- Ce document fait l'objet d'un trop grand nombre de modifications ✓ - Forum Word
3 réponses
Bonjour
tout d'abord, c'est bien domage d'utiliser linq et de construire ta collection "à la main".
Intéresse toi au binding.
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Le message d'erreur en lui même, veut dire qu'au moins un objet de la ligne vaut null (donc n'est pas définit)
Dans
dataGridView1.Rows[i] doit exister au vu de ta boucle
Donc soit
Pour savoir précisémement ou se situe le problème, quand le programme plante, survolle la ligne avec la souris et attends à chauqe élément se que t'indique l'info bulle. Si ça n'est pas assez parlant, espionne chaque partie
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
tout d'abord, c'est bien domage d'utiliser linq et de construire ta collection "à la main".
Intéresse toi au binding.
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Le message d'erreur en lui même, veut dire qu'au moins un objet de la ligne vaut null (donc n'est pas définit)
Dans
d.codeart = dataGridView1.Rows[i].Cells[0].Value.ToString();
dataGridView1.Rows[i] doit exister au vu de ta boucle
Donc soit
- la collection de Cells n'est pas initialisée (normalement si)
- soit elle est vide, il n'y a donc pas de Cells[0] dans la collection (théoriquement ça n'est pas possible non plus)
- Soit il n'y a rien d'écrit dans la cellule et donc Value est null (probablement ça), et dans ce cas le binding l'aurait traité à ta place....
Pour savoir précisémement ou se situe le problème, quand le programme plante, survolle la ligne avec la souris et attends à chauqe élément se que t'indique l'info bulle. Si ça n'est pas assez parlant, espionne chaque partie
dataGridView1.Rows[i] dataGridView1.Rows[i].Cells[0] dataGridView1.Rows[i].Cells[0].Value
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
d.codeart = dataGridView1.Rows[i].Cells[0].Value.ToString();
Au :
d.codeart = dataGridView1.Rows[i].Cells[0].ToString();
mais j'avais le meme probleme au 2eme ligne et je l'ai changer comme celui la mais un autre problem :
d.Qte = int.Parse(dataGridView1.Rows[i].Cells[3].ToString());
il m'a dit que le format de la chaine d'entre est incorrect
Là encore, le binding gérerait ça à ta place.
Je trouve toujours inutile de disposer d'outils performants et de ne pas s'en servir.....
Sinon vérifier que les cellules ne soient pas vides avant de tenter des affectations ou des conversions, avec un if sur Value, ou une fusion null https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator ou un opérateur ternaire https://docs.microsoft.com/fr-fr/dotnet/csharp/language-reference/operators/conditional-operator
Sinon tu peux aussi faire TryParse, mais tu devras aussi faire un if dessus