none
Répercuter directement les changements d'un datagridview dans un dataset RRS feed

  • Question

  • Bonjour.

    J'ai un Dataset en Datasource de mon Datagridview. Seulement, je viens de m'apercevoir d'un petit problème que je n'arrive pas à résoudre.

    Lorsque j'ai plusieurs lignes d'affichées, pas de problèmes. Si je modifie les données d'une cellule, puis que j'appuie sur Enter ou que je clic sur une AUTRE ligne, alors les changements sont bien appliqués sur le dataset et je peux mettre à jour ma base sous Access (je récupère les changements avec GetChanges()).

    Seulement je viens de m'apercevoir que les changements sont répercutés sur le dataset que lorsqu'on change de ligne ! Si on modifie plusieurs cellules sur la même ligne il n'y a pas de changements répercutés sur le dataset (ce qui est logique en effet et m'arrange bien par ailleurs). Par contre dès qu'on change de ligne, GetChanges() retourne la ligne modifiée.

    Sauf que si on a qu'une ligne d'affichée (car la propriété AllowUserToAddRow est à false dans mon Dgv donc il n'y a pas de ligne blanche en dessous) on ne peut pas passer à une autre ligne ! Donc on a beau appuyer sur entrée ou cliquer autre part, on ne change jamais de ligne donc le datagridview ne répercute pas les changemetns dans le dataset donc il n'est pas mis à jour donc je ne peux pas mettre à jour ma base ...

    Quelqu'un aurait-il une piste ?
    • Modifié AlexBesn vendredi 7 août 2009 14:48
    vendredi 7 août 2009 14:09

Réponses

  • Bonjour,

    Il me semble que si le DataGridView perd le focus, il met à jour automatiquement la ligne qui étaient en cours d'edition.
    Dans le cas contraire, pour forcer la fin de l'édition du DataGridView et mettre à jour la ligne, utilisez la méthode EndEdit() du DataGridView.

    Cordialement
    Gilles TOURREAU - MVP C#
    • Marqué comme réponse AlexBesn lundi 10 août 2009 09:24
    dimanche 9 août 2009 12:58
    Modérateur

Toutes les réponses

  • Bonjour,

    Il me semble que si le DataGridView perd le focus, il met à jour automatiquement la ligne qui étaient en cours d'edition.
    Dans le cas contraire, pour forcer la fin de l'édition du DataGridView et mettre à jour la ligne, utilisez la méthode EndEdit() du DataGridView.

    Cordialement
    Gilles TOURREAU - MVP C#
    • Marqué comme réponse AlexBesn lundi 10 août 2009 09:24
    dimanche 9 août 2009 12:58
    Modérateur
  • Bonjour.

    Merci pour votre aide, mais en éxécutant EndEdit() après avoir appuyé sur la touche entrée cela ne fonctionne pas.

    GetChanges() sur mon dataset me retourne null même après EndEdit().

    EDIT :

    Tu avais raison pour le focus. Il suffit de mettre le focus sur un autre élément quand on appuie sur entrée et le Datagridview change les rowstate dans le Dataset.

    Merci !
    lundi 10 août 2009 08:07