控件DBGridEh如何点击title如何排序,要query如何实现的,不用ADOtable?谢谢!

解决方案 »

  1.   

    这都行?
    没办法, 只有重新生成 query 语句, close, open
      

  2.   

    在OnTitleClick事件中
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
    with query do
    begin
    close;
    sql.add('order by ' + Column.FieldName );
    open;
    end;
      

  3.   

    query有个SORT属性,里面记录了排序的字段名和排序方式。
    你可以,知道单击了那个列,然后,对SORT属性进行处理。
    详细的看看DELPHI的帮助。
      

  4.   

    procedure TSjh_Msg.DBGridEh1SortMarkingChanged(Sender: TObject);
    var i :Integer;
        s:String;
       function DeleteStr(str:String; sunstr:String): String;
       var i:Integer;
       begin
         i := Pos(sunstr,str);
         if i <> 0 then Delete(str,i,Length(sunstr));
         Result := str;
       end;
    begin
      s := '';
      for i := 0 to DBGridEh1.SortMarkedColumns.Count-1 do
       if DBGridEh1.SortMarkedColumns[i].Title.SortMarker = smUpEh then
         s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ' DESC , '
       else
         s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ', ';  if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
      s := DeleteStr(s,'1');
     // LogADO.SQL.Strings[LogADO.SQL.Count-2] := s;  STemp:='';
      STemp:=s;end;
      

  5.   

    或者这样也可以的procedure TSjh_Msg.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
      Column: TColumnEh);
    var i :Integer;
        s,Stemp:String;
       function DeleteStr(str:String; sunstr:String): String;
       var i:Integer;
       begin
         i := Pos(sunstr,str);
         if i <> 0 then Delete(str,i,Length(sunstr));
         Result := str;
       end;
    begin
      case Column.Title.SortMarker of
        smNoneEh: Column.Title.SortMarker := smDownEh;
        smDownEh: Column.Title.SortMarker := smUpEh;
        smUpEh: Column.Title.SortMarker := smNoneEh;
      end;  s := '';  if (Column.FieldName = 'Type_Id') then
      begin
       if  Column.Title.SortMarker = smUpEh then s:='Type_Id'+ ' DESC , ' else  s:='Type_Id'+ ', '
      end;  if (Column.FieldName = 'Recode_Data')  then
      begin
       if  Column.Title.SortMarker = smUpEh then s:='Recode_Data'+ ' DESC , ' else  s:='Recode_Data'+ ', ' ;
      end;  if (Column.FieldName = 'Recode_Time')  then
      begin
       if  Column.Title.SortMarker = smUpEh then s:='Recode_Time'+ ' DESC , ' else  s:='Recode_Time'+ ', ';
      end;  if (Column.FieldName = 'Come_resoure') then
      begin
       if  Column.Title.SortMarker = smUpEh then s:='Come_resoure'+ ' DESC , ' else  s:='Come_resoure'+ ', ' ;
      end;  if (Column.FieldName = 'Affair_id')  then
      begin
       if  Column.Title.SortMarker = smUpEh then s:='Affair_id'+ ' DESC , ' else  s:='Affair_id'+ ', ' ;
      end;  if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
      s := DeleteStr(s,'1');  //LogADO.SQL.Text:=LogADO.SQL.Text+s;
      if Pos('ORDER BY',LogADO.SQL.Text)<>0 then LogADO.SQL.Text:=Copy(LogADO.SQL.Text, 0, Pos('ORDER BY',LogADO.SQL.Text)-1);
      LogADO.SQL.Text:=LogADO.SQL.Text+s;
      
      LogADO.Close;
      LogADO.Open;
    end;
      

  6.   

    procedure TForm_Query.FormCreate(Sender: TObject);
    var
      i:integer;
    begin
      //设置DBGridEh的排序可用,排序的代码在titlebtnclick
      with DBGridEh1 do
      for i:=0 to Columns.Count-1 do
        Columns[i].Title.TitleButton := true;
    end;procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject;
      ACol: Integer; Column: TColumnEh);
    var
      s:string;
    begin
      //进行排序
      with Column do
      begin
        if FieldName = '' then
          Exit;    case Title.SortMarker of
          smNoneEh:
            begin
              Title.SortMarker := smDownEh;
              s := Column.FieldName + ' ASC';
            end;
          smDownEh: s := Column.FieldName + ' ASC';
          smUpEh: s := Column.FieldName + ' DESC';
        end;
        //进行排序
        try
          QData.Query_Temp.Sort := s
        except
        end;
      end;
    end;
      

  7.   

    或者这样
    procedure TFmscdjcx.DBGridEHSortMarkingChanged(Sender: TObject);
    VAR
      INDEX         : INTEGER;
      SortString    : String;
      FirstFlag     : boolean;
    begin
      inherited;
      if adq_qd.Active then
      begin
        SortString := '';
        FirstFlag := true;
        FOR INDEX := 1 TO DBGridEH.SortMarkedColumns.Count DO
          if DBGridEH.SortMarkedColumns[INDEX - 1].Title.SortMarker = smUpEh then
            if FirstFlag then
            begin
              SortString := SortString + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' DESC ';
              FirstFlag := False;
            end
            else
              SortString := SortString + ',' + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' DESC '
          else
            if FirstFlag then
            begin
              SortString := SortString + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName;
              FirstFlag := False;
            end
            else
              SortString := SortString + ',' + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' ASC ';
        if adq_qd.RecordCount > 0 then
        begin
          adq_qd.Sort := SortString;
          adq_qd.Requery([eoAsyncFetch]);
        end;
      end;
    end;
      

  8.   

    要相排序先设置一下DBGrideh
    字段级
         titile --》title butoon := true
    数据源
         optioneh下与排序有关的
      

  9.   

    procedure TfrmFKQD.DBGridEh1TitleClick(Column: TColumnEh);
    begin
        Adoquery1.Sort :=column.FieldName ;
    end;结贴吧
      

  10.   

    to firetoucher(风焱),  老大,像这种问题你就留给我们菜鸟回答吧。
    算了还是贴上代码吧(在titleclick事件中)
    if dbgrid1.DataSource.DataSet.active then
      begin
        screen.Cursor := crhourglass;
        flag := not flag; //升降序
        Field_sort := column.FieldName; //排序字段
        with dbgrid1.DataSource.DataSet as tquery do
        begin
          close;
          sql.clear;
          sql.add('select * from table1 ');
          if field_sort <> '' then
          begin
            sql.add('order by ' + Field_sort);
            if flag then
            begin
              sql.add(' desc');
            end
            else
              sql.add(' asc');
          end;
          if not prepared then prepare;
          try
            open;
          finally
            screen.Cursor := crdefault;
          end;
        end;
      end;
      

  11.   

    不好意思,再问一个问题,query没有Sort 属性吧?要是有这个属性就很方便了。谢谢上面的各位,等这个问题问完,一会再结贴。
      

  12.   

    有一个比较简单实现的思路:在Query的SQL语句中增加Order by :XXX其中XXX是参数,根据点击的列,改XXX参数,然后Requery就可以了!