dbgrid  滚动条在平常查询如查询一百条记录能正常出现,但改变查询条件查询到一次空记录后,滚动条不见了(空记录不见滚动条也属正常)关键是再回过头来查出刚才的一百条记录,滚动条也会不见了!

解决方案 »

  1.   

    我給個建議:因為你使用的是DBGRID組件,查詢時(當數據量很多時,需要拖動滾動條來查看數據)這樣不太方便,建議LZ直接寫MOUSE滾動事件來回滾數據
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids;type
       TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        ADOTable1: TADOTable;
        DataSource1: TDataSource;
        procedure FormCreate(Sender: TObject);
      private
       Procedure OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    //------------------------------------------------------------------------------
    Procedure TForm1.OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
    begin
      if Msg.message = WM_MouseWheel then
      begin
        if Msg.wParam > 0 then
         begin
           if DBGrid1.Focused then
             SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEUP,0);
         end
        else
         begin
           if DBGrid1.Focused then
             SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
         end;
        Handled:= True;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
     Application.OnMessage:=OnMouseWheel; // 截获鼠标滚动事件
    end;   
      

  2.   

    嗯,1楼兄弟的方法不错,原生的DBGrid并不支持鼠标滚轮,加入上述代码后,就给它加上了鼠标滚轮翻页的功能。
      

  3.   

    继续在测试中,好奇怪的现象:
    DBGRID1连DataSource1连ADOQuery1
    查询出一百条记录,上下滚动条出现,查询到空记录,不出现(前两步完全正常)再次查询刚才一百条,滚动条不出现了,再查询一下空记录,再查询一百条,滚动条又回来了。
      

  4.   

    每次在查询到数据后加了一行ShowScrollBar(dbgrid1.Handle,SB_BOTH,true),有点觉得画蛇添足,但好象也是不是办法的办法。