Positionierungs- und Farbimplementierung von Zeilen im DBGrid in DELPHI
Beim Betrieb eines Datenbanksystems stellte ich fest, dass die Datenzeile im DBGrid-Steuerelement nicht positioniert werden konnte und dass nach dem Auffinden einer bestimmten Zeile die aktuelle Zeile nicht eindeutig markiert werden konnte (z. B. nach dem Ändern der Farbe). Informationen, ich habe festgestellt, dass es im Grunde keine Einführung in diesen Inhalt gibt, einschließlich einiger dynamischer Farben in der oberen Reihe. In Artikeln wie „Se“ und anderen geht es um Vorgänge, die während der Dateninitialisierung ausgeführt werden, es gibt jedoch keine Neupositionierungsfunktion nach der Aktualisierung der Datenquelle. Daher habe ich beschlossen, dieses Problem zu lösen. Nach einem Vormittag der Recherche in der DELPHI-Hilfe und der Anzeige relevanter Informationen habe ich Ich habe ein wenig Xiaocheng, jetzt schreibe es auf und lerne daraus zusammen mit allen meinen Kollegen. Bitte gib mir einen Rat bei etwaigen Unangemessenheiten.
Zuerst habe ich die Ttable- und Tquery-Steuerelemente durchsucht und keine Methode gefunden, die die Datenzeile direkt finden kann. Ich habe auch nach dem DBGrid gesucht und keine entsprechende Funktion gefunden, die eine bestimmte Datenzeile direkt finden kann Nach kontinuierlichen Bemühungen habe ich endlich eine Methode in TdataSet gefunden: GoToBookmark. Diese Methode kann den Datensatzzeiger im aktuellen DBGrid auf die Zeile verweisen, die Sie angeben müssen.
Nachdem diese Methode gefunden wurde, ist das Problem nur zur Hälfte gelöst. Die Farbe der Datenzeile, auf die der aktuelle Zeiger zeigt, muss ebenfalls geändert werden. Das heißt, die aktuell ausgewählte Zeile muss auf offensichtliche Weise markiert werden (mit Ausnahme der kleinen). und unansehnliche Markierung auf dem DBGrid. (Außer bei offensichtlichen Lesezeichen) Dies ist offensichtlich im DBGrid-Steuerelement implementiert. Es gibt ein Ereignis OnDrawDataCell. Das Überladen dieser Methode kann die Farbe der angegebenen Datenzeile ändern.
Der spezifische Nutzungsprozess ist wie folgt:
(1) Datenzeilen dynamisch positionieren
//============================================= ===============
//Prozessname: DyDbgDataLine
//Autor: Haitianer
//Datum: 22.02.2003
//Funktion: Automatisch zu einer Datenzeile im DBGrid-Steuerelement wechseln, die diese Bedingung erfüllt, basierend auf benutzerdefinierten Bedingungen
//Eingabeparameter:
// sValue: Der Wert der Zeile, die aktuell verschoben werden muss;
// tab: Daten der entsprechenden Tabelle im aktuellen DBGrid;
// dsr: die Datenquelle, die aktuell betrieben werden muss;
//Rückgabewert: Keiner
//Datensätze ändern:
//============================================= ================
PROzedur DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)
var
Lesezeichen:TBookMark;
beginnen
//Zeichne die aktuell markierte Zeile auf;
bookmark:=self.tab.GetBookmark;
self.tab.first;
während nicht self.tab.Eof tun
beginnen
if self.tab.FieldByName('cpbh').AsString= sValue dann
beginnen
bookmark:=self.tab.GetBookmark;
brechen;
Ende;
self.tab.Next;
Ende;
self.dsr.DataSet.GotoBookmark(pointer(bookmark));
Ende;
Beschreibung: Die verwendete Tabelle wurde an das DBGrid auf der aktuellen Anzeigeschnittstelle gebunden;
(2) Ändern Sie die Farbe, um die aktuelle Datenzeile zu markieren
Setzen Sie zunächst die DefaultDrawing-Eigenschaft von DBGrid auf false; rufen Sie dann die folgende Funktion in der OnDrawDataCell-Ereignisfunktion auf:
//============================================= ===============
//Prozessname: DrawLine
//Autor: Haitianer
//Datum: 22.02.2003
//Funktion: Ändern Sie die Farbe der angegebenen Zeile in Dbgrid als Markierung;
//Eingabeparameter:
// zdm: Feldname;
// Rect: eine Einheit der Zeile, die betreten und verlassen werden muss;
// Feld: aktuell angezeigtes Feld;
// Status: der Anzeigestatus der aktuellen Zeile;
// zdz: Der Wert der Zeile, die aktuell verschoben werden muss;
// tab: Daten der entsprechenden Tabelle im aktuellen DBGrid;
// dbg: DBGrid, das aktuell betrieben werden muss;
//Rückgabewert: Keiner
//Datensätze ändern:
//============================================= ================
procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)
beginnen
if (tab.fieldbyname(zdm).asstring=zdz)then
beginnen
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clgelb;
Ende;
dbg.DefaultDrawDataCell(Rect,Field,State);
Ende;