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 :

Dapper SQLite et gestion grille


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 602
    Par défaut Dapper SQLite et gestion grille
    Bonjour

    Sur les conseils de fred1599, j'ai copmmencé à utiliser Dapper pour interroger ma base.
    Mais je n'arrive pas à voir comment fonctionne les supressions, ajouts ou mises à jour de données dans ma grille avec cet ORM.
    Pour récupérer un ou une liste d'éléments , pas de problème.

    Mais pour l'instant, je suis toujours sur mon SQLiteDataAdapter et mon SQLiteCommandBuilder pour gérer ma grille de données affichant mes documents.

    Alors, est-ce que c'est possible de tout faire avec Dapper ou bien dois-je continuer à utiliser les fonctioàns de base ?
    Est-ce qu'il y aurait quelque part un tuto que j'aurais zappé et qui me donnerait les clés de ce problème (qui n'en est surement pas un )
    J-L aka Papy pour les amis

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 776
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 776
    Par défaut
    Tu es peut-être passé à côté le passage de la doc officiel qui en parle => https://www.learndapper.com/non-query

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 602
    Par défaut
    Je n'avais pas vu la documentation officielle. Seulement les quelques exemples sur github. Je vais étudier tout ça. Merci beaucoup
    J-L aka Papy pour les amis

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 602
    Par défaut
    Alors j'ai bien lu le lien indiqué mais ça ne répond pas vraiment à ma question.
    Ou alors, je n'ai rien compris.

    Avec le SQLiteDataAdapter les opérations se font toutes seules avec un simple update qui prend en compte autant les ajouts que les suppressions ou modiofications.
    Tout ce que je vois avec Dapper, c'est que je peux faire toutes ces opérations c'est vrai. Mais il faudrait que je gère chaque opération.

    Aurais-je raté quelque chose en lien avec la DataGridView ?
    J-L aka Papy pour les amis

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 776
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 776
    Par défaut
    Avec Dapper seul, il n'y a pas d'insert/update/delete "automatiques". Il faut passer écrire explicitement les requetes d'insertion/update/delete et passer la requête et l'objet à la méthode Execute de la connexion (comme c'est écrit dans le lien donné).
    Il y a sinon le package Dapper.Contrib (+Dapper.Contrib.Extensions) (https://dappertutorial.net/dapper-contrib) qui fournit les méthodes Insert/Update/Delete auquel on passe l'objet.
    Et comme il n'y a rien d'automatique (ce n'est pas son rôle), il faut intercepter et traiter soi-même les événements RowValidated pour le update, UserAddedRow pour l'insertion, UserDeletingRow pour la suppression.

    (exemple de code non testé)
    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
    // 1. UPDATE : Quand une cellule existante a été modifiée et que l'utilisateur change de ligne
    private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        // Éviter de déclencher l'update sur la nouvelle ligne vide du bas
        if (dataGridView1.Rows[e.RowIndex].IsNewRow) return;
     
        var produit = (Produit)dataGridView1.Rows[e.RowIndex].DataBoundItem;
     
        // Si le produit a déjà un ID, c'est une modification
        if (produit != null && produit.Id > 0)
        {
            using (var db = new SQLiteConnection(ConnString))
            {
                db.Update(produit); // Dapper.Contrib génère le UPDATE SQL automatiquement
            }
        }
    }
     
    // 2. INSERT : Quand une nouvelle ligne vient d'être entièrement saisie
    private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
    {
        // On récupère la ligne précédente (celle qui vient d'être validée et ajoutée à la liste)
        int indexPrecedent = dataGridView1.NewRowIndex - 1;
        if (indexPrecedent < 0) return;
     
        var nouveauProduit = (Produit)dataGridView1.Rows[indexPrecedent].DataBoundItem;
     
        if (nouveauProduit != null && nouveauProduit.Id == 0)
        {
            using (var db = new SQLiteConnection(ConnString))
            {
                // Dapper.Contrib fait le INSERT et réinjecte directement le nouvel ID SQLite dans l'objet
                long nouvelId = db.Insert(nouveauProduit); 
                nouveauProduit.Id = (int)nouvelId; 
            }
        }
    }
     
    // 3. DELETE : Quand l'utilisateur sélectionne une ligne et appuie sur la touche 'Suppr'
    private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
    {
        var produitASupprimer = (Produit)e.Row.DataBoundItem;
     
        if (produitASupprimer != null && produitASupprimer.Id > 0)
        {
            var dialogue = MessageBox.Show("Supprimer ce produit ?", "Confirmation", MessageBoxButtons.YesNo);
     
            if (dialogue == DialogResult.Yes)
            {
                using (var db = new SQLiteConnection(ConnString))
                {
                    db.Delete(produitASupprimer); // Dapper.Contrib génère le DELETE SQL automatiquement
                }
            }
            else
            {
                e.Cancel = true; // Annule la suppression visuelle dans le DataGridView si refusé
            }
        }
    }

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 602
    Par défaut
    D'accord ... Donc, Un fonctionnement similaire à celui du SqlAdapter n'existe pas avec Dapper.
    C'était justement ce que je cherchais.

    Merci pour l'explication et l'exemple
    J-L aka Papy pour les amis

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/07/2026, 19h43
  2. Gestion de la concurrence avec SQLite en C
    Par xinu666 dans le forum SQLite
    Réponses: 3
    Dernier message: 17/04/2008, 23h41
  3. Réponses: 0
    Dernier message: 22/10/2007, 19h32
  4. Classe de gestion de base de données SQLITE
    Par Munkey74 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 09/08/2007, 16h50
  5. Gestion des colonnes d'une grille.
    Par Maglight dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/12/2005, 19h02

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