Selection + le mettre au milieu de mon DBGrid [Résolu]

Signaler
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
-
cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
 Bonjour,

Je viens demander de l'aide.
J'ai sur mon forme, un DBGrid, un TibQuery et un TDataSource.
Le résultat de ma requête (DateCom, Montant, Montant1) s'affiche bien dans le DBGrid.

A la suite de quoi, je fais un Locate('DateCom',Date,[]) sur la colonne DateCom à la date du jour. Il me trouve bien cette localisation en sélectionnant la ligne dans mon DBGrid.

Mon seul soucis et quand il y a plusieurs enregistrement visible sur mon DBGrid à l'affichage , la selection se trouve en bas du DBGrid.

J'aimerai avoir cette selection visible au milieu du DBGrid.

Merci pour l'aide...

8 réponses

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
5
J'ai du changer mon DBGrid par une ListView car je n'arrivais pas à effectuer une modification sur le DBGrid. Avec comme erreur : pas en mode édition.... J'ai eu beau modifier des paramètres notamment dgEditing ou encore ReadOnly, impossible de modifier le contenu d'une cellule.

Du coup, j'ai opté pour une listview et pour me positionner sur la date du jour, j'ai mis ce code trouvé sur ce site :

  //Pour se positionner sur la date du jour
  if (dateDeb <= Date) and (Date <= dateFin)
    then begin
      lvSoldes.Selected := lvSoldes.FindCaption(0,DateToStr(Date),True,True,True);
      if (lvSoldes.Items.Count > 0)
       then lvSoldes.Selected.MakeVisible(false);
      lvSoldes.SetFocus;
    end;
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
bonjour,
Si la sélection après locate se cale en bas du grid c'est donc que tu es sur le dernier enregistrement..(table non filtrée bien entendu)

cantador
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
5
Bjr Cantador,

Justement non, ce n'est pas mon dernier enregistrement. Par exemple, je choisis d'afficher dans ma requete les données entre le 01/06/08 et le 31/08/08,et j'utilise le locate en pointant sur le date du jour,  il se cale bien sur la date demandé dans le locate mais la selection se retrouve en bas du DBGrid. Et justement j'aimerai que la selection se cale dans l'ideal au milieu de mon DBGrid quand la plage de date est grande.

grandyaka
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
dans ma requete les données entre le 01/06/08 et le 31/08/08,
ta table est donc bien filtrée..

merci d'indiquer comment tu mets en place ce filtre et donner
le code exact du locate ?

cantador
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
Bonjour,

J'ai un peu cherché, mais sans trop de succès. Je te laisse mon brouillon si tu veux fouiller un peu plus...

Ajoute le type suivant avant la déclaration de ta form

   TDBGrid = class(DbGrids.TDBGrid)
      Published
           Procedure SetMyTopRow(ARow : integer);
   end;

et la procédure suivante dans l'implémentation :
procedure TDBGrid.SetMyTopRow(ARow : integer);
begin
        TCustomGrid(Self).TopRow := ARow;
        invalidate;
end;

Tu verras que si tu mets un point d'arrêt sur la ligne en gras, quelque soit l'enregistrement où tu te trouves le toprow est toujours à 1... C'est une piste.

Sinon, si tu n'as pas à modifier les enregistrements, tu peux travailler avec un stringgrid...

Simon
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
5
Merci pour la piste simonpelloquin, j'essayerai ton exemple. Je garde mon DBGrid car je dois en fonction du cas faire des modifications.

Des que j'ai trouvé, je préviendrais.

grandyaka
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
mets un "Order by DateCom"
dans ta requête d'ouverture et
relance ton locate.

cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
oui oui, mais cela n'a plus rien à voir avec la question posée au départ...

cantador