![]() |
Delphi-Version: 7
Listview verhält sich komisch
Moin Moin,
Ich habe auf meiner Datenbankoberfläche eine ListView, die sich ihre Daten aus einer MySQL Datenbank holt. Nun möchte ich mehrere Werte aus dieser Listview miteinander vergleichen und die Zeilen dann dementsprechenden einfärben. Das ganze habe ich nach folgendem Beispiel realisiert: ![]() Bei mir sieht das dann so aus:
Delphi-Quellcode:
In SubItems[2] stehen "ist" Werte und in SubItems[3] stehen "soll" Werte. Fallen die "ist" Werte unter die "soll" Werte, sollen die Zeilen gelb eingefärbt werden.
procedure TmainFrm.ListView2CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin if Item.SubItems[2] < Item.SubItems[3] then Sender.Canvas.Brush.Color := clYellow else if DateToStr(Date) = Item.SubItems[4] then Sender.Canvas.Brush.Color := clRed end; In SubItems[4] steht ein Datum. Stimmt das mit dem heutigen Datum überein, soll die Zeile rot eingefärbt werden. Das funktioniert grundsätzlich auch prima. Jedoch spinnt der Vergleich der "soll" und "ist" Werte. Ein Beispiel: Ein Artikel ist mit einem "soll" Wert von 3 in der ListView und hat einen "ist" Wert von 177. Er wird gelb eingefärbt. Ein anderer Artikel hat einen "soll" Wert von 10 und einen "ist" Wert von 9. Dieser ist nicht gelb eingefärbt. Lösche ich hier 8 sodass der "ist" Wert 1 beträgt wird der Artikel gelb eingefärbt. Es wirkt so, als würde nicht die ganze Zahl verglichen sondern nur die erste Stelle. Kann das sein? Wie kann ich das ändern? Danke im Voraus. |
AW: Listview verhält sich komisch
Was für einen Datentyp haben die Werte? Fließkommazahlen kann man nicht direkt mit einem Gleichheitszeichen vergleichen.
|
AW: Listview verhält sich komisch
Hallo,
die Werte in den Subitems sind als String gespeichert. Wenn du Zahlen vergleichen willst, musst Du die Strings vorher umwandeln. Falls es Integer-Werte sind, müsste folgendes funktionieren:
Delphi-Quellcode:
if StrToInt(Item.SubItems[2])<StrToInt(Item.SubItems[3]) then
Sender.Canvas.Brush.Color := clYellow else if DateToStr(Date) = Item.SubItems[4] then Sender.Canvas.Brush.Color := clRed else Sender.Canvas.Brush.Color := clWindow; |
AW: Listview verhält sich komisch
Das ging ja schnell:lol:
Vielen Dank. Hat super geklappt und läuft jetzt.:lol: Aber wo wir schon bei Listview sind: In einer anderen Listview werden ebenfalls Einträge aus einer MySQL Datenbank geladen und angzeigt. Das sind Artikel. Sie haben einen Namen, einen Hersteller, Preise usw und eben auch einen Lieferanten. Die Einträge werden in der Listview nach Lieferant sortiert. Ich möchte jetzt in die Listview eine Zeile zwischenschießen, mit dem Lieferanten. Quasi als Überschrift. Ich könnte natürlich auch eine weitere Spalte hinzufügen und dort den Lieferanten anzeigen lassen jedoch ist dafür auf meiner Oberfläche kein Platz. Ich habe schon den Befehl Listview.Items.Insert gefunden weiß damit aber nichts so recht damit anzufangen.:| Es soll im Grunde so aussehen: Lieferant A: Artikel 1 | Hersteller X Artikel 2 | Hersteller X Artikel 3 | Hersteller Y Lieferant B: Artikel 4 | Hersteller X Lieferant C: Artikel 5 | Hersteller X Artikel 6 | Hersteller Y usw Habt ihr da eine Idee? Vielen Dank |
AW: Listview verhält sich komisch
In der Delphi-7-Hilfe findet sich dazu folgendes Beispiel:
Delphi-Quellcode:
Würde bei Dir doch dann "nur" heißen:
Im folgenden Beispiel wird in eine Listenansicht ein neues Element eingefügt, und zwar direkt nach dem markierten Eintrag.
procedure TForm1.Button1Click(Sender: TObject); var InsertItem : TListItem; begin with ListView1 do InsertItem := Items.Insert(Selected.Index); InsertItem.Caption := Edit1.Text; end; Passende Stelle im ListView suchen
Delphi-Quellcode:
Oder beim Befüllen des Listviews aus der Datenbank immer dann, wenn ein neuer Lieferant auftaucht, eine Zeile mit dem Lieferantennamen einfügen und erst dann die Artikel. Sprich: Beim ersten Artikel eines Lieferanten werden zwei Zeilen erzeugt. Dann muss man auch nicht nachher suchen, ob und ggfls. wo man noch was einfügen muss.
var InsertItem : TListItem;
iIndex : Integer; begin iIndex := irgendeinwertvon0bisItemsCount-1; // Der Index des auszuwählenden Eintrages. InsertItem := ListView1.Items.Insert(iIndex); InsertItem.Caption := 'Lieferant A:' // oder wie auch immer. end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz