none
remplir un dataset avec une valeur null RRS feed

  • Question

  • 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 :

    Code Snippet
    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 .

    lundi 20 octobre 2008 13:46

Réponses

  • 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 :

    Code Snippet
    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 .

     

    mardi 21 octobre 2008 13:01
  • Bonjour,

     

    Pour répondre à votre problème concernant le IsXXXXXXXXNull() :

     

    Soit un DataSet typé avec une table MaTable.

    Si vous accédez à une ligne de cette manière :

     

    Code Snippet

    DataRow dr;

    dr = ds.MaTable.Rows[i]

     

     

    "dr" est de type DataRow, et donc la méthode IsXXXXXXNull() n'est pas présente.

     

    Lorsque vous généré un DataSet typé, Visual Studio génère une classe correspondante à une ligne typée :

     

    Code Snippet

    MaTableDataTable.MaTableRow dr;

    dr = (MaTableDataTable.MaTableRow)ds.MaTable.Rows[i];

     

     

    "dr" contient à ce moment là les méthodes IsXXXXXXXNull().

     

    Encore mieux, pour éviter un cast, vous pouvez utiliser l'indexeur par défaut de MaTable :

     

    Code Snippet

    MaTableDataTable.MaTableRow dr;

    dr = ds.MaTable[i];

     

     

    Cordialement

    dimanche 26 octobre 2008 09:15
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Vous n'aurez pas le choix que de tester si la valeur d'une cellule est à DBNull.Value.

    Utilisez pour cela les méthodes générée par le concepteur de DataSet au niveau des lignes : IsXXXXXNull(), où XXXXX est le nom de votre colonne.

     

    Cordialement
    lundi 20 octobre 2008 19:34
    Modérateur
  • Salut "Gilles" ,

    merci pour la reponse , mais le probleme de cette methode c'est que je dois tester ,si je me trompe pas, "2"puissance"nbreColonne" fois pour resoudre mon probleme  .

    donc je suis obligé de passer par les DataSet Typés pour tt , comme ça je garantie que je dois tester seulement chaque colonne et je remplis mon dataset cellule par cellule .

    merci encore pour la sol , le probleme reste ouvert et si quelqu'un a une autre solution je suis preneur .

    une petite question : je ne vois pas la propriete IsColonneNull() , j'ai que IsNull(Colonne) ,est-ce que c'est a cause du Visual Studio ?, au fait j'utilise VS2008 .

     

    mardi 21 octobre 2008 01:13
  • 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 :

    Code Snippet
    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 .

     

    mardi 21 octobre 2008 13:01
  • Bonjour,

     

    Pour répondre à votre problème concernant le IsXXXXXXXXNull() :

     

    Soit un DataSet typé avec une table MaTable.

    Si vous accédez à une ligne de cette manière :

     

    Code Snippet

    DataRow dr;

    dr = ds.MaTable.Rows[i]

     

     

    "dr" est de type DataRow, et donc la méthode IsXXXXXXNull() n'est pas présente.

     

    Lorsque vous généré un DataSet typé, Visual Studio génère une classe correspondante à une ligne typée :

     

    Code Snippet

    MaTableDataTable.MaTableRow dr;

    dr = (MaTableDataTable.MaTableRow)ds.MaTable.Rows[i];

     

     

    "dr" contient à ce moment là les méthodes IsXXXXXXXNull().

     

    Encore mieux, pour éviter un cast, vous pouvez utiliser l'indexeur par défaut de MaTable :

     

    Code Snippet

    MaTableDataTable.MaTableRow dr;

    dr = ds.MaTable[i];

     

     

    Cordialement

    dimanche 26 octobre 2008 09:15
    Modérateur
  • merci pour la reponse , chapeau

    dimanche 26 octobre 2008 12:48