处理dbgridtitleclick事件: procedure Tf_cpjg.DBGrid1TitleClick(Column: TColumn); begin if pos('DESC',t1.Sort)=0 then t1.sort:=Column.Field.FieldName+' DESC' else t1.Sort:=Column.Field.FieldName+' ASC' end; 自己画好小箭头的图片 然后用imagelist导入,DBGRID和这个imagelist绑定 在DGGRIDColumnClick事件中写column.ImageIndex:=XXXX;
在dbgrid1titleclick事件: procedure Tf_cpjg.DBGrid1TitleClick(Column: TColumn); begin adoquery1.close; adoquery1.clear; adoquery1.sql.add('select * from tablename order by fieled') end;
DBGRID可以和imagelist绑定吗?我怎么没看到?我用的是D6
**********抢分行动*********** 碰到问题查不到,花了半天时间作了一个,不敢独享。 ADO类的数据集有Sort,但是TClientDataSet没有,故作。procedure SortCDS(Column:TColumn); 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; var DataSet:TClientDataSet; ASC:boolean; Clm:TColumn; begin DataSet:=TClientDataSet(Column.Field.DataSet); if Assigned(DataSet) and (not DataSet.IsEmpty) then begin if DataSet.IndexName=Column.Fieldname then ASC:=StrPos(PChar(Column.Title.Caption),'▼')<>nil; 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, [ixCaseInsensitive,ixDescending]); Column.Title.Caption:=Column.Title.Caption+'▲'; end else begin DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixCaseInsensitive]); Column.Title.Caption:=Column.Title.Caption+'▼'; end; DataSet.IndexName:=Column.Fieldname; end; end;
procedure Tf_cpjg.DBGrid1TitleClick(Column: TColumn);
begin
if pos('DESC',t1.Sort)=0 then
t1.sort:=Column.Field.FieldName+' DESC'
else
t1.Sort:=Column.Field.FieldName+' ASC'
end;
自己画好小箭头的图片
然后用imagelist导入,DBGRID和这个imagelist绑定
在DGGRIDColumnClick事件中写column.ImageIndex:=XXXX;
procedure Tf_cpjg.DBGrid1TitleClick(Column: TColumn);
begin
adoquery1.close;
adoquery1.clear;
adoquery1.sql.add('select * from tablename order by fieled')
end;
碰到问题查不到,花了半天时间作了一个,不敢独享。
ADO类的数据集有Sort,但是TClientDataSet没有,故作。procedure SortCDS(Column:TColumn);
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;
var
DataSet:TClientDataSet;
ASC:boolean;
Clm:TColumn;
begin
DataSet:=TClientDataSet(Column.Field.DataSet);
if Assigned(DataSet) and (not DataSet.IsEmpty) then
begin
if DataSet.IndexName=Column.Fieldname then
ASC:=StrPos(PChar(Column.Title.Caption),'▼')<>nil;
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,
[ixCaseInsensitive,ixDescending]);
Column.Title.Caption:=Column.Title.Caption+'▲';
end
else begin
DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixCaseInsensitive]);
Column.Title.Caption:=Column.Title.Caption+'▼';
end;
DataSet.IndexName:=Column.Fieldname;
end;
end;