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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    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 confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    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 confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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

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

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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    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 confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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];

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    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
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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); 
        } 
    }

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

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

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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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

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

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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    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 confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    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

+ 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 Christophe 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