问题:如何实现dbgrid中用shift键进行多行选中?即类似windows的选中

解决方案 »

  1.   

    DBGrid的Option属性中有一项dgMultiSelect,改为True
      

  2.   

    用Ehlib最好,根本不用写代码,如果是DBGrid,就要写一点代码:
    dbgrid1的dgMultiSelect属性设为true
    private
      blSelect: Boolean;
      BookMark: TBookMark;procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var CurrNo: string;
    begin
      if Button = mbLeft then
        if not blSelect then
        begin
          BookMark := qrTableModify.GetBookMark;
          blSelect := True;
          Exit;
        end
        else if ssShift in Shift then
        begin
          CurrNo := qrTableModify.FieldByName('sNo').AsString;//sNo为关键字段
          qrTableModify.DisableControls;
          qrTableModify.GotoBook(BookMark);
          DBGrid1.SelectedRows.CurrentRowSelected := True;
          if CurrNo > qrTableModify.FieldByName('sNo').AsString then
            while CurrNo > qrTableModify.FieldByName('sNo').AsString do
            begin
              DBGrid1.SelectedRows.CurrentRowSelected := True;
              qrTableModify.Next;
            end
          else
            while CurrNo < qrTableModify.FieldByName('sNo').AsString do
            begin
              DBGrid1.SelectedRows.CurrentRowSelected := True;
              qrTableModify.Prior;
            end;
          qrTableModify.EnableControls;
          qrTableModify.FreeBook(BookMark);
          blSelect := False;
        end;
    end;
      

  3.   

    好象楼上的代码中的:DBGrid1.SelectedRows.CurrentRowSelected := True; 都可以不要的