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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liuin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值