在dbgrid上,当按下鼠标左键移动鼠标至松下鼠标左键,鼠标经过的所有记录都被选择上,怎样实现?

解决方案 »

  1.   

    给你一段代码,但是不全,只是作为一个参考罢了
    procedure TFrm_StockSelect.Action_AddStockExecute(Sender: TObject);
    var
      noselected: boolean;
      i,Selectrow_Count : integer;
    begin
      noselected := false;
      if DM.ADOQuery_StockSearch.recordcount > 0 then
      if Adoquery_SelectBook = nil then
      begin //如果这里为真的话,那么选择器将无法使用!
        Application.MessageBox('程序出现致命错误,请与经销商联系!','提示',MB_ICONWarning + MB_OK);
        exit;
        Application.Terminate;
      end
      else
      begin
        with DM.ADOQuery_StockSearch do
        begin
          DisableControls;
          Filter := '';
        end;
        selectrow_count := DBGridEh_Stock.SelectedRows.Count;
        IF selectrow_count < 1 then
         begin
            selectrow_count := 1;
            noselected  := true;
         end
         else
         begin
           DM.ADOQuery_StockSearch.first;
         end;
         with Adoquery_SelectBook do
           if not Active then
           try         if not ControlsDisabled then disablecontrols;
             try
               if Selectrow_Count >0 then
               for i:= 0 to Selectrow_Count - 1 do
               begin
                 Active := true;
                 if (state in [dsedit,dsinsert]) then cancel;
                 if not noselected then
                   DM.ADOQuery_StockSearch.GotoBook(pointer(DBGridEh_Stock.SelectedRows.Items[i]));             if SearchBookForDataset(DM.ADOQuery_StockSearch.FieldByName('Stock_Serial').ASSTring) then
                 begin
                    append;  //为的是不让在第一条
                 end
                 else
                   append;
     //------------------------------------分类给数据---------------------------
                 if OperType = 'Loan' then
                 begin
                 //向明细表中添加选择得数据
                  fieldbyname('Stock_Serial').value  :=DM.ADOQuery_StockSearch.FieldValues['Stock_Serial'];
                  fieldbyname('Book_Name').value  :=DM.ADOQuery_StockSearch.FieldValues['Stock_BookName'];
                  fieldbyname('Book_Type').value  :=DM.ADOQuery_StockSearch.FieldValues['Book_Type'];
                  fieldbyname('Book_Price').value  :=DM.ADOQuery_StockSearch.FieldValues['Book_Price'];
                  with DM.ADOQuery_StockType do //通过类型找到每日租金
                  begin
                    close;
                    sql.clear;
                    sql.add('select * from stockType where StockType_Name = :StockType');
                    Parameters.ParamValues['StockType'] := DM.ADOQuery_StockSearch.FieldValues['Book_Type'];
                    open;
                  end;              fieldbyname('Book_Hire').value  := DM.ADOQuery_StockType.FieldValues['StockType_Money'];
                  fieldbyname('Loan_Date').value  := formatdatetime('yyyy-mm-dd',Now);
                  fieldbyname('Loan_code').value  := Frm_Loan.Edit_LoanCode.text;
                end;            if OperType = 'Sale' then
                begin
                  fieldbyname('Stock_Serial').value  :=DM.ADOQuery_StockSearch.FieldValues['Stock_Serial'];
                  fieldbyname('Stock_BookName').value  :=DM.ADOQuery_StockSearch.FieldValues['Stock_BookName'];
                  fieldbyname('Book_Type').value  :=DM.ADOQuery_StockSearch.FieldValues['Book_Type'];
                  fieldbyname('Book_Inprice').value  :=DM.ADOQuery_StockSearch.FieldValues['Book_Price'];
                  Fieldbyname('Sale_Code').Value := Trim(Frm_StockSale.Edit_SaleCode.text);
                  FieldByName('Sale_Date').Value := FormatDateTime('yyyy-mm-dd',now);
                end;
    //--------------------------------------------------------------------------
                if (state in [dsEdit,dsInsert]) then
                begin
                  post;
                  active := false;
                end;
              end;
           except
             raise;
           end;
           finally
             EnableControls;
           end;  end;end;