用ONCELLCLICK事件,可以实现排序,不过别忘了REFRESH哟,显示三角我不知道了,不过我想不是很难吧

解决方案 »

  1.   

    dbgrid.datasouce.dataset是不是ado?
    如果是的话,只用在dbgrid的titleclick事件中加入
    var
      A_dataset:Tadodataset;
    begin
      if not (Column.Field.DataSet is tadodataset) then exit;
      A_dataset:=(Column.Field.DataSet as tadodataset);
      if A_dataset.Active=false then exit;
      if HiWord(GetKeyState(VK_CONTROL))=0 then
        begin
          if A_dataset.Sort<>column.FieldName+' ASC' then
            A_dataset.Sort:=column.FieldName+' ASC'
          else
            A_dataset.Sort:=column.FieldName+' DESC'
        end
      else
        begin
          A_dataset.Sort:=A_dataset.Sort+', '+column.FieldName+' ASC';
          showmessage('°&acute;'+A_dataset.Sort+'&Aring;&Aring;&ETH;ò.');
        end;
    end;
      

  2.   

    yuanjunjing(※挪威森林※) 
    谢谢你。程序执行到这里,
    if not (Column.Field.DataSet is tadodataset) then exit;
    就退出了,为什么?我的代码为:
    unit sort;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, Grids, DBGrids, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        Edit1: TEdit;
        procedure DBGrid1TitleClick(Column: TColumn);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var
      A_dataset:Tadodataset;
    begin
      //Edit1.Text :=pchar(Column.Field.DataSet);
      if not (Column.Field.DataSet is tadodataset) then exit;
      A_dataset:=(Column.Field.DataSet as tadodataset);
      if A_dataset.Active=false then exit;
      if HiWord(GetKeyState(VK_CONTROL))=0 then
        begin
          if A_dataset.Sort<>column.FieldName+' ASC' then
            A_dataset.Sort:=column.FieldName+' ASC'
          else
            A_dataset.Sort:=column.FieldName+' DESC'
        end
      else
        begin
          A_dataset.Sort:=A_dataset.Sort+', '+column.FieldName+' ASC';
          showmessage('°&acute;'+A_dataset.Sort+'&Aring;&Aring;&ETH;ò.');
        end;
    end;
    end.
      

  3.   

    这里是一段我们工程的原码你参照一下,不过我门的工程是三层的,如果你的是两层可能参数上要有一点变化,你可以试一下,这种方法肯定是行的通的!if not Column.Field.DataSet.Active then Exit; 
    if Column.Field.IsBlob then Exit;
    Tclientdataset   (column.Field.DataSet).IndexFieldNames :=column.FieldName;你可以在TITLECLICK中调用这个函数!看看吧。
      

  4.   

    TO :  cndebug(A-wu) 在TITLECLICK中怎样调用这个函数?if not Column.Field.DataSet.Active then Exit; 
    if Column.Field.IsBlob then Exit;
    Tclientdataset   (column.Field.DataSet).IndexFieldNames :=column.FieldName;应该放在何处?