AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview verhält sich komisch

Ein Thema von Vienesko · begonnen am 11. Jan 2018 · letzter Beitrag vom 11. Jan 2018
Antwort Antwort
Vienesko

Registriert seit: 21. Mai 2017
Ort: Hamburg
13 Beiträge
 
#1

Listview verhält sich komisch

  Alt 11. Jan 2018, 10:36
Delphi-Version: 7
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:
http://www.delphipraxis.net/54915-li...n-faerben.html

Bei mir sieht das dann so aus:
Delphi-Quellcode:
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[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.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Listview verhält sich komisch

  Alt 11. Jan 2018, 10:41
Was für einen Datentyp haben die Werte? Fließkommazahlen kann man nicht direkt mit einem Gleichheitszeichen vergleichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Listview verhält sich komisch

  Alt 11. Jan 2018, 10:43
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;
  Mit Zitat antworten Zitat
Vienesko

Registriert seit: 21. Mai 2017
Ort: Hamburg
13 Beiträge
 
#4

AW: Listview verhält sich komisch

  Alt 11. Jan 2018, 13:38
Das ging ja schnell

Vielen Dank. Hat super geklappt und läuft jetzt.

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

Geändert von Vienesko (11. Jan 2018 um 13:42 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.419 Beiträge
 
Delphi 7 Professional
 
#5

AW: Listview verhält sich komisch

  Alt 11. Jan 2018, 14:30
In der Delphi-7-Hilfe findet sich dazu folgendes Beispiel:
Delphi-Quellcode:
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;
Würde bei Dir doch dann "nur" heißen:
Passende Stelle im ListView suchen
Delphi-Quellcode:
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;
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz