DBGrid nach Status aus der Datenbank färbeln
-
Hallo,
ich möchte bei einer DBGrid die jeweiligen Zeilen abfragen und diese dann je nach "Status" in der SQL Datenbank einfärben.
Datenbank schaut so aus:
Nr. Gericht Tisch Status
12 Wurst 2 bestelltWie ich die Zeilen anspreche und diese einfärbe habe ich so herausbekommen:
void __fastcall TFormKoch::DBGridBestellungenDrawColumnCell( TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { ADOQuery3->Fisrt(); int zeilen[] ={1,3,4}; for(int i=0; i<3; i++) if (DBGridBestellungen->DataSource->DataSet->RecNo == zeilen[i]) DBGridBestellungen->Canvas->Brush->Color = clRed; DBGridBestellungen->DefaultDrawColumnCell(Rect, DataCol, Column, State); }
jetzt wird die zeile 1,3 und 4 rot eingefärbt.
Aber wie bekomme ich heraus welche Zeilen den Status "bestellt" haben?
Könnte ich das mit ADOQuery1->First(); dann spreche spalte 4 an, speichere dies in string, vergleiche ob diese "bestellt" heißt und gebe 1 zurück in ein array.
dann mit ADOQuery1->Next(); das selbige...wenn ja wie muss der while befehl heißen, damit ich nicht mehr einlese als da sind.? while(ADOQuery1->Next()) funktioniert leider nicht.
Vielleicht geht es auch viel leichter und ich denke um 5 ecken...
Wie würdet ihr das angehn? hat wer eine Idee?
MfG
-
um alle Datensätze durchzugehen gibt es viele Möglichkeiten
for (ADOQuery1->First();!ADOQuery1->Eof;ADOQuery1->Next()) { //Tu etwas } //oder ADOQuery1->First(); while (!ADOQuery1->Eof) { //Tu etwas ADOQuery1->Next(); } //oder ADOQuery1->First(); do { //Tu etwas ADOQuery1->Next(); } while (!ADOQuery1->Eof) //oder for (int i=0; i<ADOQuery1->RecordCount; i++) { //Tu etwas ADOQuery1->Next(); }
-
Danke dir, ich hatte auch die while schleife benutzt... dachte nur es gibt eine einfachere Lösung.
Trotzdem vielen Dank!
Gruß
-
Kann mir mal einer erklären, wozu das Iterieren gut sein soll? Das ist doch innerhalb der DrawCell ziemlich kontraproduktiv.
Zumindest so weit ich das verstehe, befindet sich die Datenquelle zum Zeitpunkt des Zeichnens auf dem entsprechenden Datensatz.Ungetestet:
if (DBGrid->DataSource->DataSet->FieldByName("Status")->Value == "was weiß ich was") DBGrid->Canvas->Brush->Color = clRed; else DBGrid->Canvas->Brush->Color = clWhite;
Gruß KK
-
void __fastcall TFormKoch::DBGridBestellungenDrawColumnCell( TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if (ADOQuery3->FieldByName("Status")->Value == "bestellt") DBGridBestellungen->Canvas->Brush->Color = clRed; else DBGridBestellungen->Canvas->Brush->Color = clWhite; DBGridBestellungen->DefaultDrawColumnCell(Rect, DataCol, Column, State); }
Wobei man noch State (mittels if (State.Contains(gdFocused)) ) auswerten sollte, um die Zeile oder Spalte farblich anders zu markieren, wenn sie markiert ist.