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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 23889
Url: https://administrator.de/forum/hab-ein-mega-problem-eine-smdbgrid-ab-und-aufwaerts-zu-sortieren-23889.html
Ausgedruckt am: 09.01.2025 um 01:01 Uhr
3 Kommentare
Neuester Kommentar
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;
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;