在dbgrid的标题栏上按一下标题就进行排序,同时加上一下向上向下的图案,请问怎么做啊?

解决方案 »

  1.   

    在dbgrid的TileClick事件中写入下
    var
       ls_str: string;
    begin
       ls_str:=query1.fields[Column.index].fieldname;
       with query1 do
       begin
          close;
          sql.Clear;
          sql.Add('select * from dbo.jobs order by '+ls_str);
          open;
       end;
    end;
      

  2.   

    那我能不能在dbgrid上加个图案啊
      

  3.   

    使用ADOQuery 它有排序功能,不用自己再重新组织Query这么麻烦
    在dbgrid的TileClick事件中写入下
    var
       ls_str: string;
      
    begin
       ls_str:=query1.fields[Column.index].fieldname;
       with adoquery1 do
       begin
       if 顺序 then   sort := ls_Str + ' ASC'   //顺序
       else    sort := ls_Str + ' DESC'  //逆序
          end;
    end;
      

  4.   

    推荐使用第三方控件:dxDBGrid
      

  5.   

    能给dbgrid表格加图案
    在dbgrid的onDrawColumnCell事件中编写
    具体代码自己搜索一下
      

  6.   

    加上一下向上向下的图案我没试过,给你个函数吧
    BSort:Boolean;//要声明,按DBGrid头升降排序function ClickDBGridTitle(DBGird:TDBGrid;Query:TADOQuery;i:integer):boolean;
    var Fieldname:string;
    begin
      if BSort then
      begin
      if Query.FieldByName(DBGird.Columns[i].FieldName).FieldKind=fkLookup then
         FieldName:=Query.FieldByName(DBGird.Columns[i].FieldName).KeyFields+' ASC'
      else
         FieldName:=DBGird.Columns[i].FieldName+' ASC';
      BSort:=false;
      end
      else
      begin
      if Query.FieldByName(DBGird.Columns[i].FieldName).FieldKind=fkLookup then
         FieldName:=Query.FieldByName(DBGird.Columns[i].FieldName).KeyFields+' DESC'
      else
         FieldName:=DBGird.Columns[i].FieldName+' DESC';
      BSort:=true;
      end;
      Query.Sort:=FieldName;
    end;
      

  7.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var
        i:integer;
        fieldname:string;
    begin
        //排序
        i:=Column.Index;
        if bSort then
          begin
            fieldname:=DBGrid1.Columns[i].FieldName+' ASC';
            bSort:=False;
          end
        else
          begin
            fieldname:=DBGrid1.Columns[i].FieldName+' DESC';
            bSort:=True;
          end;    Query1.Close;
        Query1.Sql.Clear;
        Query1.Sql.Add('Select * from country');
        Query1.Sql.Add('order by '+fieldname);
        Query1.Open;    //table1.IndexFieldNames := fieldname;
        //query1.Sort:=fieldname;
    end;