Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   JEDI Ultimgrid Grid sortieren (https://www.delphipraxis.net/177113-jedi-ultimgrid-grid-sortieren.html)

Luckner 17. Okt 2013 09:41

JEDI Ultimgrid Grid sortieren
 
Hallo,

ich würde gerne JEDI Ultimgrid benutzen, weil man damit angeblich in dem Grid relativ einfach sortieren kann. Problem ist, wie ich die benötigte Indizes erstellen kann (Datenbank ist Firebird, Zugriff über Dataset). Indizes in der Tabelle kann ich erstellen, aber wo trage ich das ein in diesem Ultimgrid. Wüde mich über jeden Hinweis freuen.

Gruß, Luckner

Perlsau 17. Okt 2013 10:41

AW: JEDI Ultimgrid Grid sortieren
 
Man sortiert Datenbank-Tabellen nicht in der darstellenden Komponente, sondern bereits beim Select:

select * from MyTable order by Idx_MyTable;

Die meisten Queries, Datasets usw. bieten eine Alternative, denn sie verfügen über das Property IndexFieldNames, das quasi eine "Online"-Sortierung gestattet: Das Query muß nicht erst geschlossen werden, wenn man den Eintrag in IndexFieldNames ändert. Weitere Informationen zu IndexFieldNames findest du in deiner Online-Hilfe.

Ich verwende zur tabellarischen Darstellung von Datenmengen gewöhnlich das TjvDBGrid. Dort stellt man nach erfolgter Sortierung im Query einfach das Property SortedField auf das Feld, nach welchem man gerade im Query sortiert hat. Wenn TitleButtons auf True steht, kann man das Property TitleArrow verwenden, um einen entsprechenden Sortier-Pfeil in der Titelzeile anzeigen zu lassen.

Luckner 17. Okt 2013 15:49

AW: JEDI Ultimgrid Grid sortieren
 
Danke für die schnelle Antwort. Mein Kunde hätte gerne, so wie er das von Access kennt, die Sortierung über den Kopf des Grids gemacht, ohne die Datensätze jedesmal mit select neu zu laden. Mit dem Jedi Ultimgrid soll es jedenfalls einfach sein (so habe ich mal in einem Beitrag gelesen). Leider finde ich diesen Beitrag nicht mehr und so detailiert beschrieben war er auch nicht. Klar, Dein Weg ist auch eine Möglichkeit. wenn ich mit dem Ultimgrid nicht weiter komme, werde ich Dein Weg ausprobieren.

Danke, Luckner

Perlsau 17. Okt 2013 16:15

AW: JEDI Ultimgrid Grid sortieren
 
Zitat:

Zitat von Luckner (Beitrag 1232310)
Danke für die schnelle Antwort. Mein Kunde hätte gerne, so wie er das von Access kennt, die Sortierung über den Kopf des Grids gemacht, ohne die Datensätze jedesmal mit select neu zu laden. Mit dem Jedi Ultimgrid soll es jedenfalls einfach sein (so habe ich mal in einem Beitrag gelesen). Leider finde ich diesen Beitrag nicht mehr und so detailiert beschrieben war er auch nicht. Klar, Dein Weg ist auch eine Möglichkeit. wenn ich mit dem Ultimgrid nicht weiter komme, werde ich Dein Weg ausprobieren.

1. Dein Kunde sieht beim Einsatz deiner Anwendung nicht, was im Hintergrund läuft. Für den Anwender ist das Programm eine Blackbox.

2. Du kannst beim TjvDBGrid wie auch beim TDBGrid das Ereignis OnTitleKlick verwenden, um die Sortierung vom Anwender anstoßen zu lassen. Schau dir einmal meinen Passwort Tresor (Freeware) an, dort wird die Tabelle genau so sortiert, wie du es beschreibst.

3. Auch ein DBGrid, das angeblich die Sortierung übernimmt (habe UltimGrid noch nie verwendet), wird intern nicht anders arbeiten als entweder ein neues Select abzusetzen oder eben IndexFieldNames zu setzen.

4. Beim Verwenden von IndexFieldNames wird die Datenmenge nicht neu geladen, sondern neu sortiert.

5. Datensensitive Komponenten dienen ausschließlich der Darstellung und er Weitergabe von Benutzeraktionen. Alles andere machst du besser direkt mit den entsprechenden Queries, Datasets oder Tables.

Das hier ist ganze Sortier-Methode:
Delphi-Quellcode:
Procedure TDatBankEdit.Zugang_Sort(Spalte : Integer; Feld : String);
Const
  SortText = 'Zugangsdaten sortiert nach ';
Var
  SortSQL,
  SortOrd : String;

begin
  IF Allg.BTab.PassSortOrder THEN
  BEGIN
    SortOrd := ' aufwärts';
    SortSQL := ' ASC';
  END ELSE
  BEGIN
    SortOrd := ' abwärts';
    SortSQL := ' DESC';
  END;

  DatMod.ClientSet_Speichern;
  DatMod.Qset_Zugang.IndexFieldNames := Feld + SortSQL;
  DatMod.ClientSet_Laden;

  CASE Spalte OF
  0 : Allg.BTab.PassSortText := SortText + 'Objekt'    + SortOrd;
  1 : Allg.BTab.PassSortText := SortText + 'Zugangsart' + SortOrd;
  2 : Allg.BTab.PassSortText := SortText + 'URL'       + SortOrd;
  3 : Allg.BTab.PassSortText := SortText + 'Benutzer'  + SortOrd;
  4 : Allg.BTab.PassSortText := SortText + 'Passwort'  + SortOrd;
  END;

  Allg.BTab.PassSortIdx := Spalte;
end;
Die Sortmarker werden hier gesetzt:
Delphi-Quellcode:
Procedure TFormMain.SortmarkerSetzen;
begin
  DBGrid_Zugang.SortedField := DBGrid_Zugang.Columns[Allg.BTab.PassSortIdx].FieldName;
  IF Allg.BTab.PassSortOrder           THEN
     DBGrid_Zugang.SortMarker := smUp  ELSE
     DBGrid_Zugang.SortMarker := smDown;
end;
Aufgerufen wird das dann so:
Delphi-Quellcode:
Procedure TFormMain.Sortieren(Spalte : Integer);
begin
  IF Spalte = Allg.BTab.PassSortIdx                                 THEN
              Allg.BTab.PassSortOrder := NOT Allg.BTab.PassSortOrder ELSE
              Allg.BTab.PassSortOrder := True;
  DBE.Zugang_Sort(Spalte,GetSortedField(Spalte));
  SortmarkerSetzen;
  Allg.StatBar_Main_Aktuell;
end;
Und hier das Ereignishandling vom Titelklick:
Delphi-Quellcode:
Procedure TFormMain.DBGrid_ZugangTitleClick(Column: TColumn);
Var
  Spalte : Integer;

begin
  DBGrid_Zugang.Visible := False;
  Spalte := Column.Index;
  Sortieren(Spalte);
  DBGrid_Zugang.Visible := True;
end;

Perlsau 17. Okt 2013 16:34

AW: JEDI Ultimgrid Grid sortieren
 
Zitat:

Zitat von Smut (Beitrag 1232318)
Schön, und jetzt bitte noch die Spaltensortierung, multiplen Selects, Themes und etc. was das Ultim Grid kann :roll:

Spaltensortierung? Die habe ich doch gerade mitsamt Code vorgeführt ... Oder meintest du die Spalten-Reihenfolge? Das wäre was anderes, aber nicht die Frage.

Was sind multiple Selects?

Zitat:

Zitat von Smut (Beitrag 1232318)
Klar, man kann alles selber bauen... aber wozu?

Z.B. um die Darstellung von der Verabeitung getrennt zu halten. Und z.B. um nach mehreren Spalten gleichzeitig sortieren zu können. Und z.B. um auch nach Foreign-Key-Spalten sortieren zu können usw.

Perlsau 17. Okt 2013 17:17

AW: JEDI Ultimgrid Grid sortieren
 
Zitat:

Zitat von Smut (Beitrag 1232327)
Du selbst schreibst, Du benutzt das 'TjvDbGrid', warum nicht das TDBGrid?
Du wirst Dir doch dabei was gedacht haben.
Warum dann nicht gleich ein TJvDBUltimGrid oder ein TcxGrid ( :dancer: ) oder zur Not ein TDBAdvGrid ( :wall: )
Wie geschrieben... er meinte, das Sortieren NACH Spalten müsste funktionieren, und ich weiß, irgendwie ging das.
Spaltensortierung ging auch.
Auch nach FK kann man in gescheiten Grids sortieren.

Ganz einfach: ich hatte dieses UltimGrid vor längerer Zeit mit demselben Hintergedanken wie dem des TE ausprobiert. Es arbeitete damals nicht zu meiner Zufriedenheit. Weil das schon Jahre her ist, weiß ich nicht mehr, was nicht funktionierte. TjvDBGrid setze ich ein, weil es erstens gegenüber dem TDBGrid erweiterte Möglichkeiten bietet und zweitens einwandfrei funktioniert. Eine Zeitlang hatte das TjvDBGrid den Fehler, daß die Veränderung der Spaltenbreite zur Design- wie zur Laufzeit nicht korrekt arbeitete. Seit dieser Bug behoben wurde, kann man damit fehlerfrei arbeiten.

Ich entwickle nicht nur "Hello World" Programme, sondern lebe vom Programmieren und muß mich daher darauf verlassen können, daß meine Produkte beim Kunden fehlerfrei arbeiten. Da bleibt oft nur wenig Zeit für Experimente, man geht die Wege, die sich als zuverlässig zielführend erwiesen haben, besonders, wenn man unter Termindruck steht.

Wenn ich Zeit habe, das UltimGrid mal wieder zu testen, werde ich das womöglich auch tun. Aber eigentlich will ich gar keine eierlegende Wollmilchsau, die alles in einer Komponente erledigt. Ob man mit UltimGrid nach Subtabellen sortieren kann, weiß ich nicht. Da arbeiten nicht mal alle Datenbank-Komponenten einwandfrei. Mein IbDac von Devart macht das zuverlässig, deshalb halte ich mich daran. Kostenpflichtige Grid-Komponenten kann ich mir derzeit nicht leisten.

Du schreibst: Irgendwie ging das. Ich schreibe: So geht das. Erkennst du den Unterschied?


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