再问DbGrid按列标题排序问题
下列事件过程,点击列标题后能排序,颜色和▼\▲能够切换,但是,点击另一列后,原来那一列的▼或▲符号不会消失.我的要求是,点击另一列后原来的那一列只显示列标题,不在显示▼或▲符号,请问怎么处理?
procedure TForm1.DBGrid3TitleClick(Column: TColumn);
var i:integer;
begin
if adoquery2.Sort = Column.FieldName then //AdoQCX为MyDBGrid绑定的Tadoquery
begin
For i:=0 to dbgrid3.Columns.Count-1 do
dbgrid3.Columns[i].Title.RestoreDefaults;
adoquery2.sort := Column.FieldName + ' DESC';
Column.Title.Font.Color:=clPurple; //用紫色表示 逆序
dbgrid3.Canvas.Refresh ;
Column.Title.Caption:=dbgrid3.SelectedField.FieldName + '▼' ;
end
else begin
For i:=0 to dbgrid3.Columns.Count-1 do
dbgrid3.Columns[i].Title.RestoreDefaults;
adoquery2.Sort := Column.FieldName;
Column.Title.Font.Color:=clBlue; //用蓝色表示正序字段
dbgrid3.Canvas.Refresh ;
column.Title.Caption:=dbgrid3.SelectedField.FieldName + '▲' ;
end;
end;
问题点数:0、回复次数:12Top
1 楼ljz9425(阿九)回复于 2004-08-03 12:45:30 得分 0
用DBGridEHTop
2 楼kyong()回复于 2004-08-03 12:51:37 得分 0
我是想问上面代码怎么修改才能达到要求?Top
3 楼kyong()回复于 2004-08-03 20:00:32 得分 0
寻找高手Top
4 楼sousouwjh(sousouwjh)回复于 2004-08-03 20:14:22 得分 0
点击后循环各COULMN判断是不是当前列如何!不是就把题头改下!Top
5 楼ChinaZhou(斯科)回复于 2004-08-03 20:30:11 得分 0
给column置空不就行了吗?Top
6 楼kyong()回复于 2004-08-03 20:51:01 得分 0
怎么置空?是这样吗?通不过
column.Title.Caption:='';Top
7 楼kyong()回复于 2004-08-03 21:00:42 得分 0
如何判断是否当前列呢?Top
8 楼sousouwjh(sousouwjh)回复于 2004-08-04 09:17:06 得分 0
点题头后用一个变量保存下来嘛!Top
9 楼kyong()回复于 2004-08-04 21:52:00 得分 0
希望给我写出代码Top
10 楼Linyco(Linyco)回复于 2004-08-04 21:56:07 得分 0
我为了与广大DELPHI爱好者共同讨论,建立了一个群,欢迎大家加入!
群号是:5245338Top
11 楼kyong()回复于 2004-08-04 22:44:25 得分 0
怎么没有高手帮忙呀?Top
12 楼hlb1111(蜀狼)回复于 2004-11-03 12:53:57 得分 0
procedure TForm1.DBGridTitleClick(Column: TColumn);
var s,cFieldName:string;
i:integer;
DataSet:TDataSet;
procedure setTitle;
var ii:integer;
cStr:string;
c:TColumn;
begin
for ii:=0 to TDBGrid(Column.Grid).Columns.Count-1 do
begin
c:=TDBGrid(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
cFieldName:=Column.Field.KeyFields
else if Column.Field.FieldKind=fkCalculated then
cFieldName:=Column.Field.KeyFields
else
cFieldName:=Column.FieldName;
if DataSet is TCustomADODataSet then begin
s:=TCustomADODataSet(DataSet).Sort;
if s='' then begin
s:=cFieldName;
Column.Title.Caption:='▲'+Column.Field.DisplayName;
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.Field.DisplayName;
end
else begin
Column.Title.Caption:='▲'+Column.Field.DisplayName;
Delete(s,i,4);
end;
end
else begin
s:=cFieldName;
Column.Title.Caption:='▲'+Column.Field.DisplayName;
end;
end;
TCustomADODataSet(DataSet).Sort:=s;
end
else if DataSet is TClientDataSet then begin
// TClientDataSet(DataSet).IndexFieldNames:=Column.FieldName;
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'+Column.FieldName;
Fields:=Column.FieldName;
DescFields:=Column.FieldName;
end;
end;
TClientDataSet(DataSet).IndexFieldNames:='';
TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;
Column.Title.Caption:='▼'+Column.Field.DisplayName;
end
else
begin
TClientDataSet(DataSet).IndexName:='';
TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;
Column.Title.Caption:='▲'+Column.Field.DisplayName;
end;
end;
end;Top




