20. november 2003 - 23:48Der er
2 kommentarer og 1 løsning
Sortering af et DBgrid med en Mysql database
Hejsa eksperter
Så har jeg endnu en hård nød at knække....
Jeg vil gerne at man kan trykke på en kolonnes titel, hvorefter at DBGrid'ets data blev sorteret efter denne kolonne i faldende orden. Hvis man trykker igen skal der sorteres i stigende orden.
Jeg ved godt hvordan jeg "aflæser" kolonnens titel.. det gør jeg ved: column.Field.FieldName
Men hvordan sorterer jeg DBGrid'et med denne oplysning?
Det må jo være noget med en sql-statement som skal sendes - eller kan man gøre det direkte i DBGrid'et?
DBGrid'et er koblet en mySQLTabel.. der er connection til databasen vha. en datasource og en mySQLdatabase komponent.
skift væk fra mySQLTabel og brug istedet for mySQLQuery... herved kommer man selv til at kunne styre sine sql-statements.
Først sørger man for at DBgriddet er fyldt med date....
procedure TForm1.Button8Click(Sender: TObject); var aQuerry: TmySQLQuery; begin try aQuerry:=mySQLQuery1; with aQuerry do begin SQL.Clear; //sikrer at query'ens sqlstatement bliver slettet SQL.Add('select * from prototype'); ExecSQL; dbgrid1.DataSource.DataSet.Open; //sætter dataset.active = open/true dbgrid1.DataSource.DataSet.Refresh; //opdaterer dbgriddet
end; Finally end;
end; end.
...okey.. så er vi klar til at trykke på en kollone i DBGriddet og sortere efter denne.. dette gøres på følgende facon:
dobbeltklik på dbgriddets event for titleclick.. og cut'n'paste følgende ind.
procedure TForm1.DBGrid1TitleClick(Column: TColumn); var aQuerry: TmySQLQuery; begin try aQuerry:=mySQLQuery1; with aQuerry do begin SQL.Text := 'SELECT * FROM prototype ORDER BY '+ column.Field.FieldName; ExecSQL;
Sådan gør jeg med dbexpress komponenter og lidt sql
procedure TfrmFalcoRemote.vDBGridStatusTitleClick(Sender: TObject; Column: TVolgaColumn); var i : Integer; begin if DM.SQLConDB.Connected then with TDBGrid(Sender) do for i := 0 to Columns.Count - 1 do Columns[i].Title.Font.Color := clBlack; with DM.SQLcdsInt do begin if IntLogSortOrder then begin Close; DM.SQLcdsInt.CommandText:= 'SELECT * FROM intersec ORDER BY '+Column.Title.DefaultCaption+' ASC'; Open; Column.Title.Font.Color := clBlue; IntLogSortOrder := False; end else begin Close; DM.SQLcdsInt.CommandText:= 'SELECT * FROM intersec ORDER BY '+Column.Title.DefaultCaption+' Desc';
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.