IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#] Truc bizarre avec DataSet


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut [C#] Truc bizarre avec DataSet
    Je remplis plusieurs DDL en instanciant plusieurs fois une classe qui se connecte à une BDD, exécute la requete, place le résultat dans un DataSet qui devient la DataSource de chaque DDL.

    Dans ma classe qui exécute la requête, je veux rajouter un enregistrement null aux résultats reçus avant de l'affecter à la DataSource de ma DDL.

    Voici donc le code que j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                foreach(DataTable myTable in oDataSet.Tables){
                    DataRow maLigne = myTable.NewRow();
                    foreach(DataColumn myColumn in myTable.Columns){
                        maLigne[myColumn]=null;
                    }
                myTable.Rows.InsertAt(maLigne,0);
                }
    Et ce code fonctionne seulement pour ma première DDL. Je ne comprends pas pourquoi, vu que je créé une instance pour chaque DDL.

    Quelqu'un a une idée ?

    Merci.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben tu ne mets pas le code qui nous permettrait de comprendre ce qu'il se passe , exemple le code qui passe d'une DDLà la suivante et ainsi de suite
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Oui, je sais... Mais c'est pas très simple...

    En fait, mon code marche si le DataSet contient 1 table avec un seul champ. A partir de deux champs, ça ne fonctionne plus...

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par bendj
    Oui, je sais... Mais c'est pas très simple...
    Alors imagines pour nous qui ne voyons rien
    Allez balances le code qu'on y comprenne quelquechose
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Ok ! Tu m'as convaincu ! Je publie ça dans la journée.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Voilà le code...

    D'abord, la fonction qui initialise mes DDL dans MaPage.aspx.cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private void InitDDL(){
    	MesFonctions oMesFonctions = new MesFonctions();
    	ArrayList myAL = new ArrayList();
     
    	myAL.Clear();
    	myAL=oMesFonctions.GetList1();
    	DropDownList1.DataSource=myAL[0];
    	DropDownList1.DataTextField=myAL[1].ToString();
    	DropDownList1.DataValueField=myAL[2].ToString();
    	DropDownList1.DataBind();
     
    	myAL.Clear();
    	myAL=oMesFonctions.GetList2();
    	DropDownList2.DataSource=myAL[0];
    	DropDownList2.DataTextField=myAL[1].ToString();
    	DropDownList2.DataValueField=myAL[2].ToString();
    	DropDownList2.DataBind();
    }
    Ensuite, la classe MesFonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public class MesFonctions{
     
    	public ArrayList GetList1();
                try{
                //Connexion à la base de données
                actionBDD oactionBDD = new actionBDD(); //ActionBDD est une classe personnalisée d'accès aux données
                oactionBDD.OpenBDD(1);
                //Récupérations de la liste 1
                oactionBDD.SelectBDDToDS("SELECT Champ1, Champ2 FROM Table1");
                //Stockage des infos récoltées dans une liste
                ArrayList myAL = new ArrayList();
                myAL.Add(oactionBDD.oDataSet);
                myAL.Add("Champ1");
                myAL.Add("Champ2");
                //Fermeture de la connexion
                oactionBDD.CloseBDD();
                return myAL;
                }
                catch (Exception ex){
                return null;
                }
            }
     
    	public ArrayList GetList2();
                try{
                //Connexion à la base de données
                actionBDD oactionBDD = new actionBDD();
                oactionBDD.OpenBDD(1);
                //Récupérations de la liste 2
                oactionBDD.SelectBDDToDS("SELECT Champ1 FROM Table2");
                //Stockage des infos récoltées dans une liste
                ArrayList myAL = new ArrayList();
                myAL.Add(oactionBDD.oDataSet);
                myAL.Add("Champ1");
                myAL.Add("Champ1");
                //Fermeture de la connexion
                oactionBDD.CloseBDD();
                return myAL;
                }
                catch (Exception ex){
                return null;
                }
            }
    }
    Enfin, la méthode SelectBDDToDS de la classe ActionBDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public void SelectBDDToDS(string strRequete) {
     
    	//Connexion de la BDD au SQL Adaptater
            oSqlCommand.Connection = oConnection;
            oSqlCommand.CommandText=strRequete;
     
            oSqlDataAdapter.SelectCommand = oSqlCommand;
     
            //Remplissage du DataSet
            oDataSet.Clear();
            oSqlDataAdapter.Fill(oDataSet);
     
            //Ajout des champs blancs null
            foreach(DataTable myTable in oDataSet.Tables){
    	        DataRow maLigne = myTable.NewRow();
                    foreach(DataColumn myColumn in myTable.Columns){
                        maLigne[myColumn]=null;
                    }
                    myTable.Rows.InsertAt(maLigne,0);
            }
    }
    La DDL2 s'initialise avec un champ null. La DDL1 ne s'initialise pas avec un champ null. Pourquoi ?

    Voilà.. Si vous avez des questions.... mais surtout des réponses, n'hésitez pas !

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Première petite remarque et suggestion:
    DropDownList1.DataSource=myAL[0];
    DropDownList2.DataSource=myAL[0];
    La Propriété ArrayList.Item retourne un type Object, ne serait-il pas judicieux d'attribuer à DataSource un DataSet Explicite soit par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DropDownList1.DataSource=(DataSet)myAL[0];
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    J'ai essayé, mais je ne vois aucune différence. Les remplissages sont identiques.
    Tu es sûr que cela renvoie un type Object ? Quand on affecte un item à la ArrayList, l'item ne prend-il pas l'identité de l'objet que l'on insère ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    myAL[0].ToString(); renvoie System.Data.DataSet

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok
    suggestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void SelectBDDToDS(string strRequete)
     { 
       //Connexion de la BDD au SQL Adaptater 
       // etc...
       //Ajout des champs blancs null 
       foreach(DataTable myTable in oDataSet.Tables)
        { 
           DataRow maLigne = myTable.NewRow(); 
           myTable.Rows.Add(maLigne); 
        } 
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Ca a l'air de fonctionner !

    Mais pourquoi ma méthode n'était pas bonne ?

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par bendj
    Ca a l'air de fonctionner !
    Mais pourquoi ma méthode n'était pas bonne ?
    Ben tu voulais juste une ligne vide en plus donc voilà j'ai simplifié sans chercher à comprendre
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Oui, mais c'est important aussi de comprendre...

  14. #14
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par bendj
    Oui, mais c'est important aussi de comprendre...
    Ben vu que ton objectif est d'ajouter une ligne vide pourquoi essayer de comprendre une m'ethode qui fait d'abord le tour de toutes les colonnes de sa table pour ajouter des valeurs nulles puis un InsertAt (déjà là aucun intérêt) je ne suis même pas sûr de comprendre à quoi aboutie cette méthode certainement que l'insert ne se faisait pas au bon endroit, enfin peu importe je t'ai surtout donné la méthode correcte donc... pourquoi en chercher une autre dont l'objectif est autre chose que d'ajouter une ligne vide
    Allez c'était çà le but du jeu non
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Le InsertAt, c'est pour ajouté en tête de la table... Car la méthode Add ajoute à la fin. Du coup, mes DDL s'intialisent sur null car c'est le premier enregistrement.

  16. #16
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par bendj
    Le InsertAt, c'est pour ajouté en tête de la table... Car la méthode Add ajoute à la fin. Du coup, mes DDL s'intialisent sur null car c'est le premier enregistrement.
    Question de goût, je n'en discutes pas
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Truc bizarre avec Clone() et Dispose()
    Par Dokare dans le forum C#
    Réponses: 2
    Dernier message: 03/05/2015, 10h13
  2. [PHP 5.3] Truc bizarre avec les dates
    Par razam dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2015, 16h46
  3. Truc bizarre avec QString
    Par chrtophe dans le forum Débuter
    Réponses: 3
    Dernier message: 30/05/2012, 15h15
  4. Truc bizarre avec Boost.Phoenix
    Par Mat007 dans le forum Boost
    Réponses: 2
    Dernier message: 20/07/2010, 14h57
  5. un truc bizarre avec l'évaluateur delphi
    Par isachat666 dans le forum EDI
    Réponses: 1
    Dernier message: 07/04/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo