Implémentation du positionnement et de la coloration des lignes dans DBGrid dans DELPHI
Lors de l'exploitation d'un système de base de données, j'ai constaté que la ligne de données dans le contrôle DBGrid ne pouvait pas être positionnée et qu'après avoir localisé une certaine ligne, la ligne actuelle ne pouvait pas être clairement marquée (comme en changeant la couleur après de nombreuses recherches). Pour plus d'informations, j'ai découvert qu'il n'y avait pratiquement aucune introduction à ce contenu, y compris certaines couleurs dynamiques de la rangée supérieure. Des articles tels que Se et d'autres parlent tous d'opérations effectuées lors de l'initialisation des données, mais il n'y a pas de fonction de repositionnement après l'actualisation de la source de données, j'ai donc décidé de résoudre ce problème. Après une matinée de recherche sur l'aide de DELPHI et de visualisation d'informations pertinentes, j'ai décidé de résoudre ce problème. J'ai un petit Xiaocheng, maintenant écrivez-le et apprenez-en avec tous mes collègues. S'il vous plaît, donnez-moi quelques conseils sur toute opportunité.
Tout d'abord, j'ai recherché les contrôles Ttable et Tquery et n'ai trouvé aucune méthode permettant de localiser directement la ligne de données. J'ai également recherché le DBGrid et n'ai trouvé aucune fonction correspondante permettant de localiser directement une certaine ligne de données. ensemble de données. Après des efforts continus, je l'ai finalement trouvé. J'ai trouvé une méthode dans TdataSet : GoToBookmark. Cette méthode peut faire pointer le pointeur d'enregistrement dans le DBGrid actuel vers la ligne que vous devez spécifier.
Après avoir trouvé cette méthode, le problème n'est qu'à moitié résolu. La couleur de la ligne de données pointée par le pointeur actuel doit également être modifiée, c'est-à-dire que la ligne actuellement sélectionnée doit être marquée de manière évidente (sauf pour la petite). et marque disgracieuse sur le DBGrid). (Sauf pour les signets évidents) Ceci est évidemment implémenté dans le contrôle DBGrid. Il existe un événement OnDrawDataCell dans le contrôle DBGrid. La surcharge de cette méthode peut changer la couleur de la ligne de données spécifiée.
Le processus d'utilisation spécifique est le suivant :
(1) Positionner dynamiquement les lignes de données
//================================================= ===============
//Nom du processus : DyDbgDataLine
//Auteur : haïtien
//Date : 2003-02-22
//Fonction : passer automatiquement à une ligne de données dans le contrôle DBGrid qui répond à cette condition en fonction des conditions spécifiées par l'utilisateur
//Paramètres d'entrée :
// sValue : la valeur de la ligne qui doit actuellement être déplacée ;
// tab : données de la table correspondante dans le DBGrid courant ;
// dsr : la source de données qui doit actuellement être exploitée ;
//Valeur de retour : Aucune
//Modifier les enregistrements :
//================================================= ================
PROcédure DyDbgDataLine (sValue:string;tab:Ttable;dsr:TDatasource)
var
signet : TBookMark ;
commencer
//Enregistre la ligne actuellement marquée ;
bookmark:=self.tab.GetBookmark;
self.tab.first;
tout en n'étant pas self.tab.Eof do
commencer
si self.tab.FieldByName('cpbh').AsString= sValue alors
commencer
bookmark:=self.tab.GetBookmark;
casser;
fin;
self.tab.Suivant;
fin;
self.dsr.DataSet.GotoBookmark(pointeur(signet));
Fin;
Description : la table utilisée a été liée au DBGrid sur l'interface d'affichage actuelle ;
(2) Changez la couleur pour marquer la ligne de données actuelle
Commencez par définir la propriété DefaultDrawing de DBGrid sur false ; puis appelez la fonction suivante dans la fonction événementielle OnDrawDataCell :
//================================================= ===============
//Nom du processus : DrawLine
//Auteur : haïtien
//Date : 2003-02-22
//Fonction : Change la couleur de la ligne spécifiée dans Dbgrid en tant que marque ;
//Paramètres d'entrée :
// zdm : nom du champ ;
// Rect : une unité de la ligne qui doit être entrée et sortie ;
// Champ : champ actuellement affiché ;
// state : l'état d'affichage de la ligne actuelle ;
// zdz : La valeur de la ligne qui doit actuellement être déplacée ;
// tab : données de la table correspondante dans le DBGrid courant ;
// dbg : DBGrid qui doit actuellement être exploité ;
//Valeur de retour : Aucune
//Modifier les enregistrements :
//================================================= ================
procédureDrawLine(onglet:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)
commencer
si (tab.fieldbyname(zdm).asstring=zdz)alors
commencer
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=cljaune;
fin;
dbg.DefaultDrawDataCell (Rect, Champ, État);
fin;