brazo98
Goto Top

Hab ein Mega Problem eine SMDBGrid ab und aufwärts zu sortieren

Hallo ich habe mir soeben auf der Seite www.scalabium.com die dbgrid free Komponente herunter geladen und installiert.
Nun wollte folgende machen das SMDBGrid sollte bei klick auf den Titel auf und abwärts sortieren also A->Z und umgekehrt.
Nun weiss ich nicht ob die das schon von Haus aus mit rein bingen falls ja dann wäre ich dankbar wenn das jemand weiss. Falls nein habe ich hier noch ein paar Infos.

Nun ich habe eine MySQL am laufen, und habe eine Ztable auf die Stammdaten gelinkt. Das SMDBGrid zeigt mir dann die Daten an.
Ich habe es nun mal versucht mit einer SQL-Menge dort geht das weil ich dann diesen Code verwendet habe der funzt auch.
Schlecht ist halt wenn ich in den DBedit nun eine Person suche zeigt es mir den nicht mehr im SMDBGrid an sonder nur in den Feldern. Also kann ich leider nicht mit der SQL-Menge arbeiten sondern muss bei der Tabelle bleiben. Hier der Code der funzt mit SQL:

private var bsSortOrde

procedure TForm2.SMDBGrid1TitleClick(Column: TColumn);
var sSortColumn: String;

begin
sSortColumn := smdbgrid1.Columns.Items[Column.index].FieldName;
zquery14.close;
if bsSortOrder then
begin
zquery2.SQL.Text:=('select *,(Stimmaktien/10) as anteil_stimm, (Stammaktien+(Stimmaktien/10)) as summe_zeile from uemaske where kundenid = :kundenid and aktiv=0 order by kundenid, ')+ sSortColumn;
End
else
begin
Zquery2.SQL.Text:=('select *,(Stimmaktien/10) as anteil_stimm, (Stammaktien+(Stimmaktien/10)) as summe_zeile from uemaske where kundenid = :kundenid and aktiv=0 order by kundenid, ')+sSortColumn +' DESC';
select *,(Stimmaktien/10) as anteil_stimm, (Stammaktien+(Stimmaktien/10)) as summe_zeile from
//uemaske where kundenid = :kundenid and aktiv=0 order by kundenid
end;
Zquery2.Open;
bsSortOrder := not bsSortOrder;
end;


Und hier habe ich versucht das mal so ab zu ändern ging leider nicht! Bin echt am verzweifeln ich wäre echt froh wenn mir hier jemand weiter helfen könnte Danke!

procedure TForm2.SMDBGrid2TitleClick(Column: TColumn);
var sSortColumn: string;
var stDescending: string;
var stAscending: string;
begin
stDescending := SMDBgrid2.Columns.Items[Column.Index].FieldName;
if bsSortOrder then
begin
SMDBGrid2.SetSortField(datasource1.DataSet.FindField('id'),stDescending);
end
else
begin
SMDBGrid2.SetSortField(datasource1.DataSet.FindField('id'),stAscending);
end;
end;

HIer liegt das Problem bei ,stDescending und stAscending. Wenn man das so umgestalten könnte das diese beiden eben auf klick sich ändern wäre das Problem schon gelöst weil die sind zuständig für das auf und abwärtige sortieren.

Vielen vielen danke

Content-Key: 23889

Url: https://administrator.de/contentid/23889

Printed on: April 19, 2024 at 17:04 o'clock

Member: reini56
reini56 Jan 22, 2006 at 20:41:24 (UTC)
Goto Top
Ich glaub das hilft dir:#
procedure TfrmHTML1.SMDBGrid2TitleClick(Column: TColumn);

{$J+}
const PreviousColumnIndex : integer = 1;
{$J-}
begin
(Column.Grid as TSMDBGrid).ClearSort;
if SMDBgrid2.DataSource.DataSet is TCustomADODataSet then
with TCustomADODataSet(SMDBgrid2.DataSource.DataSet) do
begin

if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
begin
Sort := Column.Field.FieldName + ' DESC';
// if Column is TSMDBColumn then
TSMDBColumn(Column).SortType := stDescending;
Sortname := Column.Field.FieldName;

end
else
begin
Sort := Column.Field.FieldName + ' ASC';
TSMDBColumn(Column).SortType := stAscending;
Sortname := Column.Field.FieldName;
end;
end;
end;
Member: brazo98
brazo98 Jan 23, 2006 at 08:23:48 (UTC)
Goto Top
Hallo danke für deinen Code nun habe ich das mal getestet.
Leider mosert er mir hier in dieser Zeile das es ein undefierter Bezeichner sein solle hier mal der Output ich wäre dir sehr dankbar wenn du mich hier zum Ziel supporten würdest das ist echt schon lange ein delemer bekomme und bekomme das nicht hin.

if SMDBgrid2.DataSource.DataSet is TCustomADODataSet then

[Fehler] Unit2.pas(891): Undefinierter Bezeichner: 'TCustomADODataSet'[Fehler] Unit2.pas(891): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] Unit2.pas(892): Undefinierter Bezeichner: 'DataSource9'
[Fehler] Unit2.pas(892): Undefinierter Bezeichner: 'DataSource9'
[Fehler] Unit2.pas(892): 'DO' erwartet, aber Bezeichner 'DataSet' gefunden
[Fehler] Unit2.pas(895): Undefinierter Bezeichner: 'Sort'
[Fehler] Unit2.pas(895): Inkompatible Typen
[Fehler] Unit2.pas(900): Undefinierter Bezeichner: 'Sortname'
[Warnung] Unit2.pas(1016): Text hinter dem abschließenden 'END.' wird vom Compiler ignoriert
[Fataler Fehler] lss.dpr(7): Verwendete Unit 'Unit2.pas' kann nicht compiliert werden

Danke
Member: brazo98
brazo98 Jan 23, 2006 at 08:34:57 (UTC)
Goto Top
Hallo also ich benutze keine ADO Komponete ich mache das nur mit Zquery oder normale Datasource komponenten.

Wie das die Routine heisst keine Ahnung aber die TCustomADODataset geht hier nicht denke ich !

Vielen vielen dank.

Und die var Sortname: String und die sort: string hat glaube ich auch gefehlt kann das sein?

danke nochmals