Ajouter un enregistrement dans un dataset

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 20 sept. 2006 à 21:41
francesdereve Messages postés 75 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 août 2007 - 21 sept. 2006 à 23:20
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 sept. 2006 à 08:56
il faut appeler Update() après avoir ajouter la ligne...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
21 sept. 2006 à 10:33
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 sept. 2006 à 10:35
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#]
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
21 sept. 2006 à 10:57
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 sept. 2006 à 11:19
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#]
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
21 sept. 2006 à 12:08
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
0
francesdereve Messages postés 75 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 août 2007
21 sept. 2006 à 23:20
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
0