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

Accès aux données Discussion :

[C#/ADO.NET] Comment Updater une table via Datagrid ? [Débutant(e)]


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [C#/ADO.NET] Comment Updater une table via Datagrid ?
    Bonjour,
    J'utilise une connexon vers une base SQL, un DataAdapter, un DataSet typé, une DataView et un DataGrid pour afficher les datas

    j'affiche les données de la table via les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       sqlDataAdapter1.Fill(dsNorthWind1,"Employe");
        DataView dv = new DataView();
        dv.Table=dsNorthWind1.Customers;
        dataGrid1.DataSource=dv;
    Pour la modification, l'utilisateur doit sélectionner une ligne du Datagrid, entrer une valeur dans un textbox puis cliquer sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void btn_MisAJour_Click(object sender, System.EventArgs e) {
        dataGrid1[dataGrid1.CurrentCell.RowNumber,1]=this.textBox1.Text;
    sqlDataAdapter1.Update(dsNorthWind1);
        MessageBox.Show("Modification effectué");
    A l'exécution, j'observe que le champ prend bien la nouvelle valeur dans le Datagrid, par contre si je recharge la table, je récupère l'ancienne valeur.
    Donc, il me manque quelquechose pour déclencher l'update sur la table.

    Apparemment, les commandes Select, Insert, Delete et Update du DataAdapter fonctionnent car si j'édite mon DataGrid directement, les modifications sont prises en compte
    Merci
    Pierre

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    essai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void btn_MisAJour_Click(object sender, System.EventArgs e) 
    {
       dataGrid1[dataGrid1.CurrentCell.RowNumber,1]=this.textBox1.Text;
       // en supposant que le type de ton DataSet Typé se nomme
     NorthWindDataSet bien sûr...
       sqlDataAdapter1.Update(dataGrid1.DataSource as NorthWindDataSet);
       MessageBox.Show("Modification effectué");
    }

  3. #3
    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
    Je me demande si c'est pas plutôt dû au cache de l'EDI qui garde en mémoire un temp de ta bdd et donc te recharge la mauvaise ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Une solution qui marche:
    au lieu de modifier directement le DataGrid, je modifie le DataView en déclarant une DataRowCollection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DataRowCollection dR = dv.Table.Rows;
    dR[0][1] = this.textBox1.Text;
    sqlDataAdapter1.Update(dsNorthWind1);
    La solution de Guitoux1 provoque une erreur à la compilation
    "U:\Formations\C#\DataBaseAccess\Form1.cs(523): 'DataBaseAccess.DataBase.dsNorthWind1' désigne 'champ' où 'classe' était attendu"
    Merci tout de même
    Pierre

  5. #5
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    l'erreur que tu as c'est poaceque t'as mal lu mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // en supposant que le type de ton DataSet Typé se nomme
     NorthWindDataSet bien sûr...
    Il faut mettre le nom de la classe DataSet, et pas le nom de l'instance !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/01/2009, 18h31
  2. [VB.NET] Comment créer une table dans base de données ?
    Par ptitesouris dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/05/2006, 08h46
  3. [ADO.NET]Comment réaliser une relation sur plusieurs champs?
    Par kleomas dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/03/2006, 12h40
  4. [ADO.Net] Comment réaliser une jointure bindée ?
    Par prophetky dans le forum Accès aux données
    Réponses: 4
    Dernier message: 18/02/2006, 16h17
  5. [ADO.NET] Comment rendre une certaine colonne "AutoIncrement" ?
    Par maitrebn dans le forum Accès aux données
    Réponses: 3
    Dernier message: 23/03/2005, 22h12

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