大家好,问一个简单的问题!
DBGridEh列排序,当我点击列标题时,数据就按升序或降序排列,DBGridEh应该有这样的属性吧?
DBGridEh列排序,当我点击列标题时,数据就按升序或降序排列,DBGridEh应该有这样的属性吧?
解决方案 »
- cxgrid 合并单元格
- 求DELPHI2006下使用的DBGridEh
- 【求在线的大哥帮忙】关于ADOQuery1.FieldByName 《小弟没分了》
- INDY的IdUDPServer长时间运行后不能接收到数据
- 总结关于 DLL 编写的经验、教训、心得...
- 有没有现在在南昌的程序员?进来留个联系方式吧!!
- 我在C++Builder中写的一个函数,用来读入一个二进制文件,将其内容以十六进制字符的形式显示在Memo中。想用Delphi重写,请大家帮忙啊!
- 高手请进。delphi 调用 VC写的DLL问题
- 怎样检测(实时)某目录下是否有新的文件(图片)加入?如果有将其插入到数据库中?
- 请问那里有调试.DCU机器码的东东,或者有反汇编.DCU的东西???
- 多线程(Tthread)通过ADO连接access连接数据库的问题
- 关于导出数据到EXcel时出错。
DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序,
SortMarkedColumns 为当前排序列可在运行时使用.
然后在该列的ontitleclick事件中添加代码:
procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
sortstring:string; //排序列
begin
//进行排序
with Column do
begin
if FieldName = '' then
Exit;
case Title.SortMarker of
smNoneEh:
begin
Title.SortMarker := smDownEh;
sortstring := Column.FieldName + ' ASC';
end;
smDownEh: sortstring := Column.FieldName + ' ASC';
smUpEh: sortstring := Column.FieldName + ' DESC';
end;
//进行排序
try
dataset.Sort := sortstring //dataset为实际数据集变量名
except
end;
end;
end;切记lookup型字段不可做上述设置,否则系统会提示错误。
(不编程自动排序,将自动排序的属性设置完以后,记得要USE中加入EhlibAdo或者EhlibBDE、EhlibCDS这些单元的使用,具体哪个根据使用的数据库类型决定,但只能对查询类进行排序,table类是不行的,会报错。)
procedure SortDBGridEh(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
FieldName, SortStr: string;
begin
Screen.Cursor := crSQLWait;
try
if (Sender is TDBGridEh) and ((Sender as TDBGridEh).DataSource.DataSet <> nil) then
begin
if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
Exit; if not (Sender as TDBGridEh).DataSource.DataSet.Active then
Exit; FieldName := Column.FieldName;
if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
Exit;
if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkData then
SortStr := FieldName
else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkLookup then
FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
else
FieldName := ''; if (FieldName = '') or (Pos(';', FieldName) > 0) then Exit;
case Column.Title.SortMarker of
smNoneEh:
begin
Column.Title.SortMarker := smDownEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := FieldName + ' ASC';
end; smUpEh:
begin
//Column.Title.SortMarker := smDownEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := FieldName + ' DESC';
end; smDownEh:
begin
//Column.Title.SortMarker := smUpEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := FieldName + ' ASC';;
end;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
调用procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
begin
SortDBGridEh(Sender, ACol, Column);
end;
1.在OptionsEH中设置AutoSort...设置成True。
2.引用单元 EhlibADO,如果没有,请加入到搜索路径中。如果是BDE,就是EhlibBDE。
3.把需要排序的列和Title.TitleButton 设置为True。
将SortLocal属性设为True即可