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. |
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)
Dansd.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 partiedataGridView1.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-
j'ai changer le code depuis cela :
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 -
-
-
Ben tu,pourrais lire des tutos sur le binding, en commençant par celui que je t'ai mis plus haut.
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 -
-
-
Ça ne répond pas à ma question, dans le commentaire numéro 6, je t'ai proposé 4 façons de faire, laquelle veux tu que je te montre?
Je ne redemanderai pas une fois de plus.