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

C# Discussion :

modifier un dataset a partir d'un autre dataset


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut modifier un dataset a partir d'un autre dataset
    Bonjour,
    je fais du databinding donc j'ai transmis un dataset à ma couche visuel. ce dataset est modifier et je voudrai que mon dataadpter puisse comparer le dataset qui se trouve dans ma couche data avec le dataset qui provient de ma couche visuel.
    donc j'aurai voulu que le dataset 1(data) puis être remplacer par le dataset 2(visuel)

    je suis pas claire peut-être que ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Ds=Dstransmi;
     
                this.MyAdapter.Update(Ds.Tables["clients"]);
    Mais ça ne fonctionne pas?

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Ds=Dstransmi;
    en faisant ça tu travailles avec le même DataSet, et non pas deux, car tu récupère la référence du DataSet seulement, et puis je ne pense pas qu'on pourrait t'aider si tu nous montres pas comment tu fais. comment tu récupère les données, comment tu bind...etc.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    bonjour et merci de votre aide,
    voici le code se trouvant dans ma couche data, vous verrez que j'essaye avec un merge mais ca semble ne pas fonctionner:


    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
            public int UpDateClient(DataSet Ds)
           {
        // met à jours la client correspondante a l'id (idcl) fourni ce sont les element de l'objet client qui seront introduis
                this.verifConnectionClose();
                DataSet TheTable = new DataSet();
                // remplir dataset avec la table
     
                string MySQLCmd = "select * from clients ;"; //where idClient = " + idcl + " ;";
     
     
                this.MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, this.Connection);
     
                this.Connection.ConnectionString = this.ConnectionStr;
                this.OpenConnect();
                this.MyAdapter.SelectCommand = this.Connection.CreateCommand();
                this.MyAdapter.SelectCommand.CommandText = MySQLCmd;
               this. MyAdapter.Fill(TheTable, "clients");
     
     
     
               TheTable.Merge(Ds);
     
     
                //effectuer l'update
                string Upcmd = "UPDATE  clients SET nomClient = @nomClient, contact_nameClient = @contact_nameClient, contact_firstnameClient = @contact_firstnameClient, contact_civilityClient = @contact_civilityClient, mobileClient = @mobileClient, faxClient = @faxClient , mailClient = @mailClient , addressClient = @addressClient , cpClient = @cpClient ,villeClient = @villeClient ,tvaClient = @tvaClient , ibanClient = @ibanClient WHERE idClient = @idclient";
     
     
     
                this.MyAdapter.UpdateCommand = new MySqlCommand(Upcmd, this.Connection);
                this.MyAdapter.UpdateCommand.CommandText = Upcmd;
     
                DbParameter paranomclient = this.MyAdapter.UpdateCommand.CreateParameter();
                paranomclient.SourceColumn = "nomClient";
                paranomclient.ParameterName = "@nomclient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paranomclient);
     
     
     
                DbParameter paranomidClient = this.MyAdapter.UpdateCommand.CreateParameter();
                //paranomidClient.Value = TheTable.Tables["clients"].Rows[0]["idClient"];
                paranomidClient.SourceColumn = "idClient";
                paranomidClient.ParameterName = "@idclient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paranomidClient);
     
     
     
     
     
                DbParameter paracontact_nameClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paracontact_nameClient.SourceColumn = "contact_nameClient";
                paracontact_nameClient.ParameterName = "@contact_nameClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paracontact_nameClient);
     
     
                DbParameter paracontactfirstnameClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paracontactfirstnameClient.SourceColumn = "contact_firstnameClient";
                paracontactfirstnameClient.ParameterName = "@contact_firstnameClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paracontactfirstnameClient);
     
     
     
                DbParameter parcntcivClt = this.MyAdapter.UpdateCommand.CreateParameter();
                parcntcivClt.SourceColumn = "contact_civilityClient";
                parcntcivClt.ParameterName = "@contact_civilityClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(parcntcivClt);
     
     
     
     
     
                DbParameter paramobileClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paramobileClient.SourceColumn = "mobileClient";
                paramobileClient.ParameterName = "@mobileClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paramobileClient);
     
     
     
                DbParameter parafaxClient = this.MyAdapter.UpdateCommand.CreateParameter();
                parafaxClient.SourceColumn = "faxClient";
                parafaxClient.ParameterName = "@faxClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(parafaxClient);
     
     
                DbParameter paramailClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paramailClient.SourceColumn = "mailClient";
                paramailClient.ParameterName = "@mailClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paramailClient);
     
     
     
                DbParameter paraaddressClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paraaddressClient.SourceColumn = "addressClient";
                paraaddressClient.ParameterName = "@addressClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paraaddressClient);
     
     
                DbParameter paracpClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paracpClient.SourceColumn = "cpClient";
                paracpClient.ParameterName = "@cpClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paracpClient);
     
     
     
                DbParameter paravilleClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paravilleClient.SourceColumn = "villeClient";
                paravilleClient.ParameterName = "@villeClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paravilleClient);
     
     
                DbParameter paratvaClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paratvaClient.SourceColumn = "tvaClient";
                paratvaClient.ParameterName = "@tvaClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paratvaClient);
     
     
     
                DbParameter paraibanClient = this.MyAdapter.UpdateCommand.CreateParameter();
                paraibanClient.SourceColumn = "ibanClient";
                paraibanClient.ParameterName = "@ibanClient";
                this.MyAdapter.UpdateCommand.Parameters.Add(paraibanClient);
     
     
                int p = this.MyAdapter.Update(TheTable, "clients");
     
                return p;
     
     
     
          }

    lorsque je verifie les contenue de la table client s apres le merge la table semble bien modifiée donc pourquoi update ne fonctionne pas?


    merci

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    ça me semble correcte. essaie de voir si tu as des lignes modifiés avant que tu execute l'UPDATE,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable changes = TheTable.Tables["clients"].GetChanges(DataRowState.Modified);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    lorsque je visualise le contenu du dataset "Thetable"(avec visualstudio), je remarque que mes changements y apparaissent bien, mais j'ai l'impression que les lignes ont été ajoutées et non pas modifiées.

    j'ai donc essayé de faire un clear sur la table du dataset avant le merge . Alors effectivement à ce moment la visualisation me montre que le dataset "Thetable" contiend bien que les enregistrements du dataset Ds, mais l'update ne fonctionne pas.

    Si vous avez une autre idée?


    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Au fait, j'ai bien mis ton bout de code, mais la valeur de "changes" est null.


  7. #7
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    bah non si tu fais un clear, et tu fias un merge après les Rows auront le RowState Insered, donc la requête UPDATE ne marche pas,

    tu as essayé la ligne que je t'ai passé juste avant l'exécution de la requête UPDATE? pour savoir si tu as des ligne qui ont le RowState Modified dans ton DataSet TheTable.

    et tu as une clé primaire dans ta DataTable client? car sans clé primaire le merge ne parche pas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Nos reponses ont dues se croiser, Mais oui, j'ai mis ta ligne de code et la valeur de "changes"est Null.
    pourtant le contenu n'est plus le meme??
    Merci de ton aide.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    concernant la cle primaire, j'en ai bien une dans la table de ma base de donnée. mondataset est le resultat d'un select $ from... la clé primaire doit-elle être spécifiée quelque part?

    merci

  10. #10
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    bon essaies de récupérer les lignes modifiées avant que tu fasses le merge depuis ton DataSet source "ds", en executant la ligne que je t'ai donnée,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable changes = ds.Tables["clients"].GetChanges(DataRowState.Modified);
    si tu as toujours null, il faudrait et tu nous explique comment tu modifies ton ds, tu fais du binding?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Pour ma couche visuel :


    voici le début de ma classe du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public partial class ClientManagerForm : Form
        {
            CurrencyManager cm;
    		 ClientManager MonClientManager = new ClientManager();
            DataSet monDataSetClient = new DataSet() ;
            public ClientManagerForm()
            {   
                InitializeComponent();


    voici ce que je mets dans ma forme pour le binding
    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
            void PourBind() {
     
     
     
               this.monDataSetClient= MonClientManager.getListClient();
     
               cm = (CurrencyManager)this.BindingContext[monDataSetClient.Tables["clients"]];
               this.cmNomClientBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "nomClient");
               this.FirstNameContactClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "contact_firstnameClient");
               this.IbanTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "ibanClient");
               this.MobileClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "mobileClient");
               this.cmNomContactClientBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "contact_nameClient");
               this.TelTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "phoneClient");
               this.adresseClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "addressClient");
               this.FaxClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "faxClient");
               this.emailtextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "mailClient");
               this.CpClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "cpClient");
               this.VilleClientTextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "villeClient");
               this.TVATextBox.DataBindings.Add("Text", monDataSetClient.Tables["clients"], "tvaClient");
     
     
     
            }



    le bouton qui enregistre les changements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       private void EnregistreClientButton_Click(object sender, EventArgs e)
    {
     
        DataTable changes = this.monDataSetClient.Tables["clients"].GetChanges(DataRowState.Modified);
     
                MonClientManager.EditClient(this.monDataSetClient);




    Pour ma couche buisness


    voici la fonction .EditClient et GetListClient



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            public void EditClient(DataSet Ds){
     
     
                CustomerClient CuCl = new CustomerClient();
                CuCl.UpDateClient(Ds);
     
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      public DataSet getListClient()
            {
                CustomerClient CuCl = new CustomerClient();
                return CuCl.selectListClient();
     
            }

    et encore merci

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    J'ai oublié de noter que dans le Load de ma forme j'active ma fonction pourBind();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private void ClientManagerForm_Load(object sender, EventArgs e)
            {
                PourBind();
            }

  13. #13
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Bon essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void EnregistreClientButton_Click(object sender, EventArgs e)
    {   
                this.BindingContext[monDataSetClient.Tables["clients"]].EndCurrentEdit();
                DataTable changes = this.monDataSetClient.Tables["clients"].GetChanges(DataRowState.Modified);
                MonClientManager.EditClient(this.monDataSetClient);
    }

    dis moi si tu as toujours null dans changes.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Chouette ça fonctionne parfaitement.

    Mais peux-tu m'expliquer à quoi sert la ligne avec binding context??


    Et un tout tout grand Merci

  15. #15
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    la méthode EndCurrentEdit signale au BindingContext que l'édition du row en cours est finie. ^^

  16. #16
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Citation Envoyé par malvax Voir le message
    concernant la cle primaire, j'en ai bien une dans la table de ma base de donnée. mondataset est le resultat d'un select $ from... la clé primaire doit-elle être spécifiée quelque part?

    merci
    non ce n'est pas la même, tu devrais mettre une clé sur ton DataTable, d'ailleurs je ne comprend pas pourquoi le merge pour toi sans y mettre la clé.

    tu es sur que tu n'as pas de doublons quand tu fais le merge?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/01/2012, 15h32
  2. extraire un dataset à partir d'un autre dataset
    Par sidisadmir dans le forum ADO.NET
    Réponses: 1
    Dernier message: 14/09/2011, 18h40
  3. [Toutes versions] Liste modifiable - Exécuter le code à partir d'un autre contrôle
    Par forges dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/08/2011, 10h20
  4. Réponses: 5
    Dernier message: 04/01/2007, 16h46
  5. Modifier la source d'un Iframe à partir d'une autre fenêtre
    Par Dan_Rich dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/10/2005, 08h11

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