procedure TA3_form.DBGridEh1TitleClick(Column: TColumnEh);
begin
if (Not ADOQuery1.Active) or (ADOQuery1.RecordCount = 0) then exit;try
  if  AnsiPos('ASC',ADOQuery1.Sort) = 0 then
  ADOQuery1.Sort := column.fieldname + ' ASC'
  else
   ADOQuery1.Sort := column.fieldname + ' DESC'; except
 application.MessageBox('不允许对该列排序!','提示',mb_ok+mb_iconerror);
 end;
end;比如写成一个过程:
procedure dbgrid_asc(AdoQuery:TADOQuery);
。。该如何写呢?

解决方案 »

  1.   

    为啥要这么改呢?在有需要的地方直接调用该事件不就得了,DBGridEh1.OnTitleClick(DBGridEh1.Columns[1])
      

  2.   

    try
    procedure TForm1.ColSort(DBGridEh:TDBGridEh; qry:TADOQuery);
    var
      i:Integer;
    begin
      with qry do
      begin
        if (not Active) or (recordcount=0) then Exit;
        try
          for i:=0 to DBGridEh.Columns.Count-1 do
          begin
          if AnsiPos('ASC',qry.Sort) = 0 then
             Sort :=  DBGridEh.Columns[i].FieldName+' ASC'
          else
            Sort := DBGridEh.Columns[i].FieldName+' DESC';
          end;
        except
          Application.MessageBox('不允许对该列排序!','提示',mb_ok+mb_iconerror);
        end;
      end;
    end;
    procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
    begin
     ColSort(DBGridEh1,qry1);
    end;
      

  3.   

    to wsxcdx:
    你的方法不能用呀,只能执行一次,再点击第二次就不行了,你测试一下看看。
      

  4.   

    procedure dbgrid_asc(Column: TColumnEh);
    var s: string;
    begin
      with TADOQuery(Column.Grid.DataSource.DataSet) do begin
        if (Not Active) or (RecordCount = 0) then exit;
        s := ' ASC';
        if AnsiPos('ASC',Sort) > 0 then s := ' DESC';
        try
          Sort := column.fieldname + s;
        except
          application.MessageBox('不允许对该列排序!','提示',mb_ok+mb_iconerror);
        end;
      end;
    end;
      

  5.   

    调用例子:procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
    begin
      dbgrid_asc(Column);
    end;