Ajouter un enregistrement dans un dataset

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
75
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
6 août 2007
-
Bonjour,

Je cherche à ajouter un enregistrement dans un dataset.

J'ai d'abord créer un objet :
    CurrencyManager Cm = (CurrencyManager)BindingContext[dbDs_service1, "tp1_service"];
    où dbDs_service1 est mon dataset et tp1_service le nom de ma table auquel mon dataset est lié.

Pour ajouter un enregistrement à mon dataset, j'ai ensuite fait :
    Cm.AddNew();
   
La propriété count de Cm à bien été incrémenté. Cependant, cette ligne :
    dbDs_service1.tp1_service[Cm.Position].MonChamp = "blabla";
me retourne l'erreur suivante :
    There is no row at position count.

Il semble donc qu'il n'y ait pas eu d'ajout de ligne dans mon dataset...
M'y suis-je mal pris ? Ais-je oublié quelque-chose ?

Merci d'avance pour votre aide.
Mathmax

7 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
il faut appeler Update() après avoir ajouter la ligne...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Mais j'ai pourtant cet événement là :

dbDs_service1.tp1_service.RowChanged += new DataRowChangeEventHandler(tp1_service_RowChanged);

        private void tp1_service_RowChanged(object sender, DataRowChangeEventArgs e)
        {            if ((e.Action DataRowAction.Add) || (e.Action DataRowAction.Change))
            {
                try
                {
                    dbAd_service.Update(new DataRow[] { e.Row });
                }
                catch (Exception pb)
                {
                    MessageBox.Show(pb.ToString());
                    e.Row.RejectChanges();
                }
            }
        }

...et mon dataset n'est pas mis à jour.
Cependant je croyais que cette méthode servait à mettre à jour la table de ma base de donnée à partir du dataset. Sert-elle aussi à mettre à jour le dataset à partir d'une instance de CurrencyManager ? Ou parles-tu d'une autre méthode update pour faire cette mise à jour ?
Mathmax
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
c'était à partir du CurrencyManager...

car quand tu fais AddNew() à partir de celui-ci, l'enregistrement est créer en mémoire... le Update() permet de l'ajouter au dataset.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

donc en fait, il ne faut pas que j'appelle la méthode update() quand l'événement Mondataset.RowChanged se produit puisque c'est justement grâce à update que l'enregistrement va être effectivement ajouté au dataset...

Et le update permet-il aussi de mettre à jour la table de la base de donné, ou faut-il utiliser une autre méthode ?

Mathmax
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
normalement ce Update() permet d'ajouter (modifier) la ligne au dataset... ensuite, tu peux appeler l'Update() de ton  Adapter (SqlDataSource) pour mettre à jour la table.

En cas, c'est comme ça que je procède.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

En fait il n'y a pas de méthode update() pour les instances de dataset ou de CurrencyManager. De quel update() (méthode de quelle classe) parles-tu quand tu dis : "ce Update() permet d'ajouter (modifier) la ligne au dataset" ?

Mathmax
Messages postés
75
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
6 août 2007

si tu veux ajouter une ligne dans ton dataset,pourquoi tu ne fais pas le nom de ton dataset.nomdelatable..AddNomtableRow(les parametres de ta table.Si ta dataset a une table qui s'appelle Personne tu auras une methode AddPersonneRow()
FD