0
点赞
收藏
分享

微信扫一扫

最全面的DBGrid点击标题实现排序


 最全面的DBGrid标题排序实现方法:

procedure TSrv_SJSetForm.DBGridEh1TitleClick(Column: TColumnEh);
var s,cFieldName:string;
i:integer;
DataSet:TDataSet;
procedure setTitle;
var ii:integer;
cStr:string;
c:TColumnEh;
begin
for ii:=0 to TDBGridEh(Column.Grid).Columns.Count-1 do
begin
c:=TDBGridEh(Column.Grid).Columns[ii];
cStr:=c.Title.Caption;
if (pos('▲',cStr)=1) or (pos('▼',cStr)=1) then
begin
Delete(cStr,1,2);
c.Title.Caption:=cStr;
end;
end;
end;
begin
//setTitle;
DataSet:=Column.Grid.DataSource.DataSet;
if Column.Field.FieldKind=fkLookup then
begin
cFieldName:=Column.Field.KeyFields;
Exit;
end
else if Column.Field.FieldKind=fkCalculated then
begin
cFieldName:=Column.Field.KeyFields;
Exit;
end
else
cFieldName:=Column.FieldName;
setTitle;
//=================================AdoDataSet=====================
if DataSet is TCustomADODataSet then begin
s:=TCustomADODataSet(DataSet).Sort;
if s='' then begin
s:=cFieldName;
Column.Title.Caption:='▲'+Column.Title.Caption;
end
else begin
if Pos(cFieldName,s)<>0 then begin
i:=Pos('DESC',s);
if i<=0 then begin
s:=s+' DESC';
Column.Title.Caption:='▼'+Column.Title.Caption;
end
else begin
Column.Title.Caption:='▲'+Column.Title.Caption;
Delete(s,i,4);
end;
end
else begin
s:=cFieldName;
Column.Title.Caption:='▲'+Column.Title.Caption;
end;
end;
TCustomADODataSet(DataSet).Sort:=s;
end
//============================Clientdataset==========================
else if DataSet is TClientDataSet then begin
if TClientDataSet(DataSet).indexfieldnames<>'' then
begin
i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);
if i=-1 then
begin
with TClientDataSet(DataSet).IndexDefs.AddIndexDef do
begin
Name:='i'+cFieldName;//Column.FieldName;
Fields:=cFieldName;//Column.FieldName;
DescFields:=cFieldName;//Column.FieldName;
end;
end;
TClientDataSet(DataSet).IndexFieldNames:='';
TClientDataSet(DataSet).IndexName:='i'+cFieldName;//Column.FieldName;
Column.Title.Caption:='▼'+Column.Title.Caption;
end
else
begin
TClientDataSet(DataSet).IndexName:='';
TClientDataSet(DataSet).IndexFieldNames:=cFieldName;//Column.Fieldname;
Column.Title.Caption:='▲'+Column.Title.Caption;
end;
end;
end;

举报

相关推荐

0 条评论