如何实现用鼠标在TDBGrid中拖选多条记录

解决方案 »

  1.   

    TDBGrid.Option里面得dgMultiSelect:=True
      

  2.   

    dgMultiSelect只对ctrl起作用,shift要自己写:DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      ll_CurrentRow,ll_i:integer;
      if_exit:boolean;
    begin
      if not (dgMultiSelect in DBGrid1.Options) then exit;
      if DBGrid1.DataSource=nil then exit;
      if DBGrid1.DataSource.DataSet=nil then exit;  ll_CurrentRow:=DBGrid1.DataSource.DataSet.RecNo;
      if_exit:=false;
      
    //  DBGrid1.DataSource.DataSet.AutoRefresh:=false;
      if Shift=[ssShift] then
      begin
        DBGrid1.DataSource.DataSet.MoveBy(db1_selectedrow-ll_currentrow);
        while not if_exit do
        begin
          DBGrid1.SelectedRows.CurrentRowSelected:=true;      //根据情况判断当前记录前移还是后移
          if ll_currentrow<db1_selectedrow then
            DBGrid1.DataSource.DataSet.Prior
          else if ll_currentrow>db1_selectedrow then
            DBGrid1.DataSource.DataSet.Next;
          //判断是否选择完毕
          if ll_currentrow<db1_selectedrow then
            begin
              if DBGrid1.DataSource.DataSet.RecNo<=ll_currentrow then
                if_exit:=true
              else
                if_exit:=false;
            end
          else if ll_currentrow>db1_selectedrow then
            begin
              if DBGrid1.DataSource.DataSet.RecNo>=ll_currentrow then
                if_exit:=true
              else
                if_exit:=false;
            end;
        end;
      end;  //记录当前的行号  //db1_selectedrow在单元中声明
      db1_selectedrow:=ll_currentrow;
    end;