撞到枪口上了,把分全给我。 function FindColumn(Grid:TDbGrid;Name:string):TColumn; var i:integer; begin Result:=nil; for i:=0 to Grid.Columns.Count-1 do if Grid.Columns.Items[i].FieldName=Name then Result:=Grid.Columns.Items[i]; end;tdbgrid.oncolumnclick 中用以下过程 procedure SortCDS(Column:TColumn); var DataSet:TClientDataSet; ASC:boolean; Clm:TColumn; begin DataSet:=TClientDataSet(Column.Field.DataSet); if Assigned(DataSet) and DataSet.Active then begin ASC:=(StrPos(PChar(Column.Title.Caption),'▼')<>nil) and (DataSet.IndexName=Column.Fieldname); Clm:=FindColumn(TDbGrid(Column.Grid),DataSet.IndexName); if Assigned(Clm) then begin DataSet.DeleteIndex(DataSet.IndexName); Clm.Title.Caption:=Copy(Clm.Title.Caption,1,Length(Clm.Title.Caption)-2); end; if Asc then begin DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixDescending]); Column.Title.Caption:=Column.Title.Caption+'▲'; end else begin DataSet.AddIndex(Column.Fieldname,Column.FieldName,[]); Column.Title.Caption:=Column.Title.Caption+'▼'; end; DataSet.IndexName:=Column.Fieldname; end; end;dataset.beforeclose之前用以下过程procedure UnSortCDS(DbGrid:TDbGrid); var DataSet:TClientDataSet; Column:TColumn; begin DataSet:=TClientDataSet(DbGrid.DataSource.DataSet); if Assigned(DataSet) then begin Column:=FindColumn(DbGrid,DataSet.IndexName); if Assigned(Column) then begin DataSet.DeleteIndex(DataSet.IndexName); Column.Title.Caption:=Copy(Column.Title.Caption,1, Length(Column.Title.Caption)-2); end; end; end;
如果是TClientDatset那麼你該學會怎樣定義TClientDatset的索引,指定不同的索引,TClientDatset就能按不同的字段做升序或降序排序。
ClientDataSet1.IndexName:=Column.FieldName;
function FindColumn(Grid:TDbGrid;Name:string):TColumn;
var
i:integer;
begin
Result:=nil;
for i:=0 to Grid.Columns.Count-1 do
if Grid.Columns.Items[i].FieldName=Name then
Result:=Grid.Columns.Items[i];
end;tdbgrid.oncolumnclick 中用以下过程
procedure SortCDS(Column:TColumn);
var
DataSet:TClientDataSet;
ASC:boolean;
Clm:TColumn;
begin
DataSet:=TClientDataSet(Column.Field.DataSet);
if Assigned(DataSet) and DataSet.Active then
begin
ASC:=(StrPos(PChar(Column.Title.Caption),'▼')<>nil)
and (DataSet.IndexName=Column.Fieldname);
Clm:=FindColumn(TDbGrid(Column.Grid),DataSet.IndexName);
if Assigned(Clm) then
begin
DataSet.DeleteIndex(DataSet.IndexName);
Clm.Title.Caption:=Copy(Clm.Title.Caption,1,Length(Clm.Title.Caption)-2);
end;
if Asc then
begin
DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixDescending]);
Column.Title.Caption:=Column.Title.Caption+'▲';
end
else begin
DataSet.AddIndex(Column.Fieldname,Column.FieldName,[]);
Column.Title.Caption:=Column.Title.Caption+'▼';
end;
DataSet.IndexName:=Column.Fieldname;
end;
end;dataset.beforeclose之前用以下过程procedure UnSortCDS(DbGrid:TDbGrid);
var
DataSet:TClientDataSet;
Column:TColumn;
begin
DataSet:=TClientDataSet(DbGrid.DataSource.DataSet);
if Assigned(DataSet) then
begin
Column:=FindColumn(DbGrid,DataSet.IndexName);
if Assigned(Column) then
begin
DataSet.DeleteIndex(DataSet.IndexName);
Column.Title.Caption:=Copy(Column.Title.Caption,1,
Length(Column.Title.Caption)-2);
end;
end;
end;
收藏