Autor Beitrag
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Sa 05.05.07 17:48 
Hi,
ich verwende die TDBF-Komponente, um mit einer dBase-Datenbank zu arbeiten. Meine Tabelle wird in einen DB-Grid geladen.
Wenn ich dann mit der Maus auf den BDGrid-Titel (Spalte "PLZ") klicke, soll entweder ab- oder aufsteigend nach der Postleitzahl sortiert werden.
Hier mein Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
...
Procedure TMainForm.SortKundenDbf(IDXName, FeldName : String; absteigend : Boolean);
begin
  try
   KundenDbf.DisableControls;
   with KundenDbf do
    begin
      Close;
      Exclusive:=true;
      Open;
      if absteigend then AddIndex(IDXName,FeldName,[ixDescending]) { Sortierreihenfolge absteigend }
      else
       AddIndex(IDXName,FeldName,[]);                              { Sortierreihenfolge aufsteigend }
      Exclusive:=false;
      First;
    end;
   finally
    KundenDbf.EnableControls;
   end;
end;

Procedure TMainForm.KundenDBGridTitleClick(Column: TbsColumn);
Var
 SortAb       : Boolean;
 TitelCaption : String;
 t            : TDbfIndexdef;

begin
   t:=MainForm.KundenDbf.IndexDefs.GetIndexByField('PLZ');
   if (ixDescending in t.Options) then SortAb:=false
   else
    SortAb:=true;

  TitelCaption:=Column.Title.Caption;
  if TitelCaption = 'PLZ' then SortKundenDbf('IDXPLZ','PLZ',SortAb);
end;
...

Das funktioniert (fast) bestens, nur muss ich ständig 2mal auf die Titel-Leiste ("PLZ") klicken, damit es ab- bzw. aufsteigend sortiert wird.
Ein "KundenDbf.IndexDefs.Update" hat auch nicht geholfen!
Ich weiß nicht wieso? Hat jemand einen Rat?

Gruß
Crowbar

Hups, bitte in die Rubrik "Datenbanken" verschieben. Danke!
Crowbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Sa 05.05.07 18:15 
So, jetzt habe ich eine Lösung gefunden ... in meiner Funktion "SortKundenDbf":
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
...
Procedure TMainForm.SortKundenDbf(IDXName, FeldName : String; absteigend : Boolean);
begin
  try
   KundenDbf.DisableControls;
   with KundenDbf do
    begin
      Close;
      Exclusive:=true;
      Open;
      if absteigend then AddIndex(IDXName,FeldName,[ixDescending]) { Sortierreihenfolge absteigend }
      else
       AddIndex(IDXName,FeldName,[]);                              { Sortierreihenfolge aufsteigend }
      Exclusive:=false;
      Close;
      IndexName:=IDXName;
      Open;

    end;
   finally
    KundenDbf.EnableControls;
   end;
end;
...

D.h. also Datenbank schliessen, aktuellen IDXName zuweisen und wieder öffnen! :D

Gruß
Crowbar