dbgrideh排序的奇怪问题

做的一个项目中,dbgrideh某一列点击标题排序,出现莫名其妙的问题,排出顺序根本不对,乱七八糟。
最后发现是 adoquery的sql语句问题:
select a.*,b.*,c.* from a left outer join b on a.电表ID=b.电表ID
left outer join c on a.电表ID= c.电表ID
adoquery中就会有3个电表ID的字段,当我重新优化sql语句只保留一个电表ID后,点击标题排序正常!
我认为在dbgrideh的TitleBtnClick事件里的参数Column应该可以正确识别出是哪个电表ID,难道是dbgrideh的BUG?


-----------------------------------------------------------------
顺便记两个有关标题排序的东西
1、设置dghAutoSortMarking属性为true  
2、设置希望排序的Column的TitleButton属性为true  
3、uses列表中增加EhlibAdo  
    这样就可以了,不需要写代码。
这种做法的确简单省事,但弊病是速度慢,它应该是将dbgrideh关联的数据集控件的sql语句加上“order by field”
然后重新关闭打开数据集。如果你的sql语句中有 order by 的话,dbgrideh点击标题就会报错
-----------------------------------------------------------------
procedure TFrmDBCZ_CZCBSH.DBGridEh_DJTitleBtnClick(Sender: TObject;
  ACol: Integer; Column: TColumnEh);
begin
  inherited;
  SortDBGridEh(Sender,ACol,Column);
end;

procedure SortDBGridEh(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
  FieldName : 
string ;
  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
          TCustomADODataSet((Sender 
as  TDBGridEh).DataSource.DataSet).Sort : = FieldName + '  DESC ' ;
        end;
        smUpEh:
        begin
          TCustomADODataSet((Sender 
as  TDBGridEh).DataSource.DataSet).Sort : = FieldName  +   '  DESC ' ;
        end;
        smDownEh:
        begin
          TCustomADODataSet((Sender 
as  TDBGridEh).DataSource.DataSet).Sort : =  FieldName;
        end;
      end;
    end;
  
finally
    Screen.Cursor :
=  crDefault;
  end;
end;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值