TDBGridEh--如何点击列标题可对当前列自动排序而无需编写代码

Melinda 2005-09-29 05:10:27
TDBGridEh--如何点击列标题可对当前列自动排序而无需编写代码
...全文
337 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
deansroom 2005-11-02
  • 打赏
  • 举报
回复
个人dbgrid+adoquery 用sql排序
deansroom 2005-11-02
  • 打赏
  • 举报
回复
个人dbgrid+adoquery 用sql排序
zgheng 2005-11-01
  • 打赏
  • 举报
回复
你安装的enlib中dbgrideh有没有sortOnColumnClick这个属性啊??
我的有!!!!!!!
smiler007 2005-11-01
  • 打赏
  • 举报
回复
不写代码自动排序的方法

1.uses EhlibADO (如果是用BDE,则 uses ehlibBDE)
2.将该组件的[optionsEN]中的 dgAutoSortMarking 属性设置为 true;
3.双击该组件,在其弹出的属性编辑器中添加相关字段;
4.将要排序的字段的属性列表的 [title]的 titlebutton 属性设置为 true;
5.设置LocalSort为True.



Melinda 2005-11-01
  • 打赏
  • 举报
回复
我使用的也是xixuemao(俺可是㊣②㈧经儿滴人) 提到的这种方法,但是TDBGridEH控件好像是不用编写代码就可以实现这个功能,目前我还没有找到。
CableFan 2005-10-04
  • 打赏
  • 举报
回复
排序应该不是DBGrid本身的功能,而是通过它来发出命令.我是使用ADODataSet.Sort来实现的,但对BDE控件好像没作用.现在已经可以实现单字段及多字段升降序排序,但没有好的表示方法,目前只好通过列颜色来区分.
xixuemao 2005-09-30
  • 打赏
  • 举报
回复
在DBGridEh的OnTitleClick事件中
var SortString:String;
begin
if Column.Title.SortMarker = smDownEh then
SortString:= Column.FieldName+ ' ASC'
else
SortString:= Column.FieldName+ ' DESC';
TADODataSet(TDbGridEh(Sender).DataSource.DataSet).Sort:=SortString;
knife_s 2005-09-30
  • 打赏
  • 举报
回复
以前扩充TStringGrid所用的排序,

没用TDBGridEh,不过应该也是TStringGrid继承下来的,




procedure RGrid.SortEx(ACol: Integer);
var bNumberSort:Boolean;
i,j,MinRow:Integer;
MinValueASCii:String;
MinValueNumber,MinValueNumberOld:Real;
begin
//如果内容为空和只有一行,则退出
if RowCount<=FixedRows+1+1 then //只有标题行,合计栏,内容行
Exit;
//如果上次排序的列是本列,则倒转即可
if ACol=iOldSortCol then
begin
ReverseSort;
Exit;
end;
iOldSortCol:=ACol;//标记排过序的列
//增加一行
RowCount:=RowCount+1; //作为缓存
//将合计行的内容放在最后一行
//CopyRow(RowCount-2,RowCount-1);

//检查是否数字列,是则按数字进行排序,否则按字母进行排序
if ChkColIsNumberColumn(ACol) then bNumberSort:=True
else bNumberSort:=False;
//-----------以下按字母排序
if not bNumberSort then
begin
for i:=FixedRows to RowCount-3 do
begin
//将第1行的内容放在倒数第2行
CopyRow(i,RowCount-1);
MinRow:=i;
MinValueAscii:=Cells[ACol,i];
for j:=i+1 to RowCount-3 do
begin
if MinValueAscii>Cells[ACol,j] then
begin
MinRow:=j;
MinValueAscii:=Cells[ACol,j];
end;
end; //end for j
if MinRow<>i then
begin
CopyRow(MinRow,i); //将最小的行放在第一行
CopyRow(RowCount-1,MinRow); //行交换
end;

end; // end for i
end;
//-----------以上是按字母排序
//-----------以下是按数字排序
if bNumberSort then
begin
for i:=FixedRows to RowCount-3 do
begin
//将第1行的内容放在倒数第2行
CopyRow(i,RowCount-1);
MinRow:=i;
if Trim(Cells[ACol,i])='' then
MinValueNumber:=0
else
MinValueNumber:=StrToFloat(Cells[ACol,i]);
for j:=i+1 to RowCount-3 do
begin
if Trim(Cells[ACol,j])='' then
MinValueNumberOld:=0
else
MinValueNumberOld:=StrToFloat(Cells[ACol,j]);
if MinValueNumber>MinValueNumberOld then
begin
MinRow:=j;
MinValueNumber:=MinValueNumberOld;
end;
end; //end for j
if MinRow<>i then
begin
CopyRow(MinRow,i); //将最小的行放在第一行
CopyRow(RowCount-1,MinRow); //行交换
end;
end; // end for i
end;

//-----------以上是按数字排序
//删除最后一行记录,作为缓冲的内容
RowCount:=RowCount-1;

end;
jinzhili 2005-09-30
  • 打赏
  • 举报
回复
我自已修改过。是改的源代码,可以做到。回头我给你。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧