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

Contribuez Delphi Discussion :

Rafraichir un DBGrid sans perdre la séléction de la ligne


Sujet :

Contribuez Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut Rafraichir un DBGrid sans perdre la séléction de la ligne
    A prendre avec précaution :


    Je fais une modification dans mon DBGrid par une requete quelconque. Le DBGrid ne se reinitialisera pas, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOTable.Active:=false;
    ADOTable.Active:=true;
    Le probleme est que si une ligne est sélectionnée par l'utilisateur, automatiquement ca sera la premiere ligne qui va etre sélectionnée.

    Voici ce que j'ai trouvé sur le net et qui marche :
    Le DBGrid va se reinitialisé et se positionnera de nouveau sur la ligne sélectionnée :

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, .............. ;
     
    type THackDBGrid = class (TDBGrid); // A RAJOUTER
     
    type
      TForm1 = class(TForm)
    ..................
     
    procedure TForm1 .Button1Click(Sender: TObject);
    var row, rowDelta, recNo:Integer;
        ds:TDataSet;
     begin
        ds := THackDBGrid(DBGrid1).DataSource.DataSet;
        rowDelta := -1 + THackDBGrid(DBGrid1).Row;
        row := ds.RecNo;
     
        ds.Refresh;
     
        with ds do
          begin
              DisableControls;
              RecNo := row;
              MoveBy(-rowDelta) ;
              MoveBy(rowDelta) ;
              EnableControls;
          end ;
    end;

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    le mieux serait d'utiliser des Bookmarks (GetBookmark, SetBookmark, ...).
    fais une recherche sur le forum en ce sens, le sujet a été maintes fois abordé.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut
    Effectivement, j'ai essayé sans succes d'utiliser les bookmark.
    La ca a marché du premier coups et d'autre part, c'est la premiere fois que j'entends parler du THackDBGrid donc ca permettait peut-etre d'ouvrir des opportunités à certains bidouilleurs, c'est pourquoi j'ai bien mis :

    A prendre avec précaution :

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    @YannBa : C'est une contribution (tu fais partager tes découvertes) ou c'est une question ?



    Sinon, plus simple Locate sur une colonne à valeur unique

    Attention, pour les BookMark, par précaution il faut vérifier que Bookmarkvalid renvoie true !
    Attention, cela ne doit être utilisé qu'avec Refresh et ne surtout pas au passage changer la clause WHERE ou l'ORDER BY (genre pour refleter le clic sur un titre de colonne pour le tri)

    le coup THackDBGrid (accès des méthodes et propriétés protégées c'est dans la FAQ)
    J'utilise souvent comme exemple sur le forum, en vrai, je crois avoir toujours mis en place une autre solution plus pérenne ... sauf une fois pour accéder à RowCount et RowHeights



    voir sujet
    Trouver la ligne dans un DBgrid, c'est vieux d'un petit mois !
    Position dans une DBGRID
    choix de la premiere ligne d'affichage dbgrid, tient, j'avais évoqué cette solution "... des bidouilles pire encore avec MoveBy "
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Pour moi c'était une contribution...
    Je plussoie sur le locate qui est plus universel mais à condition de connaître la table concernée !

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Citation Envoyé par philnext Voir le message
    Pour moi c'était une contribution...
    Je n'avais pas vu au début que c'était dans "Contribuez" et la réponse d'Evarisnea qui proposait à yannba de faire une recherche sur le forum allait plus dans le sens réponse à une question !

    C'est vrai que le Locate pose le problème de la connaissance de la table, j'ai des grilles configurables par l'utilisateur dans certaines applis mais quoi qu'il arrive, l'appli ajoute ses colonnes "systèmes" rien que pour faciliter l'affichage de Formulaire à partir d'un ID unique !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Par défaut
    Effectivement, j'ai etudié de plus pres l'exemple :
    http://www.developpez.net/forums/d88...-ligne-dbgrid/
    Et j'ai mieux compris cette histoire de Bookmark

    @ShaiLeTroll
    http://www.developpez.net/forums/d40...s-precis-base/
    Je suis parti de ton exemple où tu parlais des THackDBGrid et n'ayant pas trouvé ton tuto .... j'ai cherché et finis par trouver l'astuce citée dans mon premier message. La boucle est bouclée. J'aurais peut-etre du citer ton message des le depart ...

    Bon, je vais maintenant essayer de comprendre les locate ...

  8. #8
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Je n'avais pas vu au début que c'était dans "Contribuez" et la réponse d'Evarisnea qui proposait à yannba de faire une recherche sur le forum allait plus dans le sens réponse à une question !
    honte à moi, j'avais loupé le forum dans lequel l'on se trouvait :oups: et j'ai répondu en croyant avoir affaire à une question

Discussions similaires

  1. Rafraichir un div sans perdre les données du formulaire
    Par Krustig dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/01/2008, 23h32
  2. [ImageMagick] Retailler image sans perdre de qualité
    Par carter15_2001 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/01/2006, 09h29
  3. [Rafraichir] Rafraichir une page sans perdre mes champs
    Par ozzmax dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/11/2005, 17h54
  4. [J2ME][MIDlet]rafraichir une image sans toucher au form?
    Par noobiewan kenobi dans le forum Java ME
    Réponses: 1
    Dernier message: 05/09/2005, 09h54
  5. rafraichir un dbGrid
    Par undertacleur dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/02/2004, 08h46

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