Remplir un dataset avec une valeur null [Résolu]

cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Dernière intervention
5 mai 2011
- 20 oct. 2008 à 14:30 - Dernière réponse : Whismeril
Messages postés
12223
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 6 janv. 2014 à 17:54
Salut tout le monde ,
j'ai un petit soucis avec le remplissage d'un dateset ,
donc j'ai deux dataset (DTSetAux,DtsetDevis) qui contiennent plusieurs et les memes tables (Dev...) , je veux remplir ma table "Dev" du "DtsetDevis" a partir de la table "Dev" du "DTSetAux" qu'elle peut contenir des champs null , pour le moment j'utilise le code :
for(int k = 0; k < DTSetAux.Tables["DevisAux"].Rows.Count; k++)
{
dtSet.AuxDetail.AddAuxDetailRow(DTSetAux.Tables["DevisAux"].Rows[k][1].ToString(),
DTSetAux.Tables["DevisAux"].Rows[k][2].ToString(), DTSetAux.Tables["DevisAux"].Rows[k][3].ToString(),
Convert.ToInt32(DTSetAux.Tables["DevisAux"].Rows[k][4].ToString()),
Convert.ToSingle(DTSetAux.Tables["DevisAux"].Rows[k][5].ToString());
}
le probleme est sur les valeurs null , est-ce je suis obligé d'utiliser les if..else.. pour chaque champ pour verifier si c'est null ou non ?? ou bien il y a une propriete pour regler ce genre de probleme .
merci d'avance .
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Dernière intervention
5 mai 2011
- 21 oct. 2008 à 14:56
3
Merci
Re ,
j'ai trouvé une solution sans passer par les DataSet typés mais je ne sais pas si c'est la bonne et la propre la solution :
for

(
int k = 0; k < DTSetAux.Tables[
"DevisAux"].Rows.Count; k++)
{

DataRow Row = dtSet.AuxDetail.NewRow();

for (
int l = 0; l < 5; l++)
{
Row[l] = DTSetAux.Tables[
"DevisAux"].Rows[k][l + 1];
}
dtSet.AuxDetail.Rows.Add(Row);
}
merci .

Merci cs_bellak 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_bellak
danious
Messages postés
27
Date d'inscription
jeudi 8 juillet 2004
Dernière intervention
5 novembre 2008
- 20 oct. 2008 à 17:29
0
Merci
Bonjour,


On dirait que tu utilises des dataset types. Si c'est le cas, utiliseDTSetAux.DevisAux[k] pour accéder à la k-ème ligne. Cette ligne ne sera plus de type DataRow "générique" mais de ton type particulier (DevisAuxRow normalement). Après, il suffit d'accéder aux champs en utilisant le "." comme pour n'importe quel champ d'une classe. En faisant comme ça, tes 3 premiers paramètres de type string ne poseront plus de problème. Pour les 2 derniers, si ta méthode demande des types non nullables et que tu récupères des types nullables depuis la table "DevisAux", pense à utiliser GetValueOrDefault sur ton type nullable.

Si tu n'utilises pas les DataSet typés, tu es obligé de tester si les champs sont null (en utilisant DBNull.Value), au mieux en utilisant la construction "<condition>?<si vrai>:<si faux>;"
Commenter la réponse de danious
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Dernière intervention
5 mai 2011
- 20 oct. 2008 à 17:44
0
Merci
bonjour "danious" ,
merci pour la reponse , mon premier DataSet (DTSetAux) n'est pas un dataset typé par contre le deuxieme est typé donc si j'ai bien compris je dois passer par un dataset typé , si c'est le cas que dois-je faire apres exactement ??
merci .
Commenter la réponse de cs_bellak
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Dernière intervention
5 mai 2011
- 21 oct. 2008 à 03:18
0
Merci
pour la deuxieme solution , le probleme c'est que je dois tester ,si je me trompe pas, "2"puissance"nbreColonne" fois si la valeur est null pour resoudre mon probleme . donc je dois utiliser la premiere solution .
encore merci , le probleme reste ouvert et si quelqu'un a une autre solution je suis preneur .
Commenter la réponse de cs_bellak
danious
Messages postés
27
Date d'inscription
jeudi 8 juillet 2004
Dernière intervention
5 novembre 2008
- 21 oct. 2008 à 09:10
0
Merci
En fait tu testerais autant de fois qu'il y a de valeurs qui peuvent être nulles, et à mon avis le temps d'exécution des tests sera très faible comparé aux temps des méthodes Convert.XXX. De toute façon, dans ton premier dataset, tu peux avoir des valeurs nulles, mais ta méthode AddAuxDetailRow ne les acceptera pas, le test est donc inévitable si tu gardes un fonctionnement similaire.
Si tu peux utiliser un dataset typé pour ton premier dataset, tu contournes le problème car tu peux directement accéder aux champs (tout l'intérêt des DataSet typés) qui seront du bon type (int, string...) et pas du type object comme quand tu as utilisé par exemple DTSetAux.Tables["DevisAux"].Rows[k][4]
Si tu peux enlever le "null autorisé" sur les champs de ta table, en leur mettant par exemple une valeur par défaut, tu n'auras plus ton problème non plus.

Sinon, simple question : pourquoi ne pas utiliser tout simplement la méthode Copy() de DataTable?

Commenter la réponse de danious
Amelie_29
Messages postés
41
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
30 octobre 2008
- 21 oct. 2008 à 11:13
0
Merci
NomDataset.Tables[





"NomMatable"

].Columns[


"NomColonne"

].AllowDBNull =


true

;

Si un champ de ta table est null : dans le dataset la valeur du champ sera égale à Dbnull.Value
Commenter la réponse de Amelie_29
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Dernière intervention
5 mai 2011
- 21 oct. 2008 à 11:46
0
Merci
bonjour ,
pourquoi ne pas utiliser tout simplement la méthode Copy() de DataTable?
j'ai deja essayé de mettre DataTable.Merge() mais le probleme et si vous voyez je collecte les enregistrements a partir de la deuxieme colonne , et meme je collecte que certains Rows .
et pour :
NomDataset.Tables["NomMatable"
].Columns[ "NomColonne"].AllowDBNull = true;
cette propriete indique si la valeur null est autorisee ou non et par defaut c'est true , donc inutile .
pour le moment la meilleure solution c'est les DataSet typés .
Commenter la réponse de cs_bellak
0
Merci
Mais pourquoi vous poser votre problématique et tu repond soi même O__o..j'ai suvi ton parcours parmi 3 forum de developpement en presentant ta problematique et comme tjr tu repond soi meme

et voici les lien ..meme dans un forum té trouvé seule -___-

http://social.msdn.microsoft.com/Forums/fr-FR/167a4c8e-1693-456b-b312-e5d17fd1df98/remplir-un-dataset-avec-une-valeur-null?forum=visualcsharpfr

http://forum.generation-nt.com/developpements/remplir-un-dataset-une-null-185621/

http://www.developpez.net/forums/d630290/dotnet/developpement-windows/windows-forms/remplir-dataset-null/

et ne me prend pas mal...je trouve si vous vouler partager la solution de votre problematique ça serai un grand honneur et un grand merçi de partagé l'info mieux de poser la problematique et repondre en même temps :)
Whismeril
Messages postés
12223
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 6 janv. 2014 à 17:54
Bonjour, premier point ce message date de 5 ans et quelques.
Second point, Bellack a finit par trouvé une solution qui lui convenait et l'a indiquée et partagée dans son message du 21 août 2008 à 14h56 (si elle ne te convient pas ben c'est un autre problème).
Troisième point il a posté cette même solution dans les 3 autres forum que tu as cité.
Enfin quatrième point ses messages sont polis et respectueux, commencent par bonjour, finissent par merci contrairement au tien.

Voilà 4 raisons, qui font que j'hésite à supprimer ton message.
Commenter la réponse de mr_aminos

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.