Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl (https://www.delphipraxis.net/174304-devexpress-cxgrid-sortieren-von-zahlen-mit-unterschiedlicher-stellenanzahl.html)

Hausmarke 16. Apr 2013 10:21

DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
Hallo ForenMember,

ich möchte in einem cxGrid eine mit Zahlen gefüllte Spalte sortieren.
Soweit funktioniert dies auch, jedoch sortiert er die Zahl "11" vor die zahl "2".
Sicherlich kann man die Zahl mit Nullen auffüllen, jedoch ist die frage was man macht, wenn aus dem 2 stelligen Zahlenkreis ein dreistelliger wird...und aus diesem irgendwann eine vierstellige Zahl?
Gibt es die Möglichkeit dieses korrekt zu sortieren ohne alle zahlen auf die gleiche Zeichenanzahl zu korrigieren?

besten dank für eure Vorschläge

Hausmarke 16. Apr 2013 10:52

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
okay ich habe die Lösung
der Datentyp der für diese Spalte in der DB hinterlegt war, war ein VarChar.
Da es sich dabei um eine Rechnungsnummer handelt, bin ich anfänglich davon ausgegangen das auch Buchstaben darin enthalten sein könnten.
Sollte dem so sein, habe ich dafür bereits eine Lösung und konnte so den Datentyp nun in Integer ändern.
Wodurch nun auch das Sortieren korrekt funktioniert.

p80286 16. Apr 2013 14:00

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
Deine Lösung würde mich jetzt schon interessieren. Auftrags- und Rechnungsnummern sind im allgemeinen keine Zahlen, sondern Strings, die aus Ziffern (und Buchstaben) gebildet werden. Da ist die Sortierung von 2... hinter 11... vollkommen richtig.

Gruß
K-H

sx2008 16. Apr 2013 16:11

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
Zitat:

Zitat von p80286 (Beitrag 1211653)
Auftrags- und Rechnungsnummern sind im allgemeinen keine Zahlen, sondern Strings, die aus Ziffern (und Buchstaben) gebildet werden.

Wobei man normalerweise Nummernkreise mit 6 bis 12 Stellen verwendet und um dem Sortierproblem zu begegnen mit Vornullen arbeitet.
Code:
00000001 ... 00000002 ... 00000003 ...
Wenn man diese Auftrags- und Rechnungsnummern nicht als Nummer sondern als String speichert hat man mehr Freiheiten.
Allgemein fährt man besser, wenn man diese "Nummern" als Identifikationsstring betrachtet.
Man könnte z.B. Testaufträge mit dem Buchstaben T beginnen lassen oder man kann eine Filialnummer vorneanstellen falls sich der Betrieb vergrössert.

Bei der Eingabe von Nummern, z.B. für die Auswahl eines best. Auftrags, sorgt die Software dafür, dass man die Nummern sowohl mit als auch ohne Vornullen eingeben kann.

Furtbichler 16. Apr 2013 18:42

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
Weiterhin ist es immer möglich, für einzelne Spalten eigene Vergleichsheuristiken zu definieren.
Delphi-Quellcode:
procedure Tmain.cxGridDBTableView1DataControllerCompare(
  ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
  AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
  If aItemIndex = myGridColumn.Index then
    Compare := MyCustomCompareFunction(V1,V2);
end;

Hausmarke 17. Apr 2013 09:41

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
eure Einwände sind durchaus zu berücksichtigen, jedoch finde ich eine Sortierung 2 hinter 11 nicht richtig, und ich glaube den User wird dies ebenfalls irritieren.

Zudem gibt es das Problem, das man die Beleg Nummer nicht automatisch hochzählen kann wenn man diese als String deklariert.

Mein Ansatz ist es dem Nutzer eine Einstellungsmöglichkeit für das Format der Nummer zu geben.
als simples Beispiel "BBBBZZZZZZ"
B für Buchstabe, Z für Zahl
Wodurch ich genau weiß wo die Nummern stehen und wo die Buchstaben.
So kann ich druch Stringmanipulation hochzählen, sortieren und trotzdem im Format "RE000025" ausgeben.

Ich bin jedoch auch offen für andere, evtl. nicht so performancelastige Lösungen.

Bummi 17. Apr 2013 09:47

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
gegf. ein kombinierter Schlüssel?

Hausmarke 17. Apr 2013 10:02

AW: DevExpress - cxGrid - sortieren von Zahlen mit unterschiedlicher Stellenanzahl
 
ja, dies wird sicher einer der besseren Lösungsansätze sein.

Da es sich zur Stringmanipulations-Variante sicher erheblich positiv in der Performance abheben wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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