食色 天下为什么不写了:dbgrideh中多选时selection 这里只处理区域(有问题,已解决)

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 12:54:18
procedure TForm1.dbGridEh2MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var  AGridEh: TDBGridEh;  TopBookMark: TBookmark;  BottomBookMark: TBookmark;  CurbookMark: TBookmark;  aBeforeScroll,aAfterScroll: TDataSetNotifyEvent;  numCount: Integer;  numSum: Extended;  numAvg: Extended;  i: Integer;  strMsg: string;  cLeft,cRight: Integer;begin//这里为知为何不能直接操作AGridEh.DataSource.DataSet.BeforeScroll 这些东西,如果操作的话就会摄错.//晕,原来是没有赋值的原因//  StrPCopy(TopBookMark,AGridEh.Selection.Rect.TopRow);//  StrPCopy(BottomBookMark,AGridEh.Selection.Rect.BottomRow);  //if not AGridEh.DataSource.DataSet.Active then Exit;//  aBeforeScroll:= AGridEh.DataSource.DataSet.BeforeScroll;//  aAfterScroll:= AGridEh.DataSource.DataSet.AfterScroll;  AGridEh:= TDBGridEh(Sender);  if not AGridEh.DataSource.DataSet.Active then Exit;  CurbookMark:= ds1.GetBookmark;  aBeforeScroll:= AGridEh.DataSource.DataSet.BeforeScroll;  aAfterScroll:= AGridEh.DataSource.DataSet.AfterScroll;  AGridEh.DataSource.DataSet.DisableControls;  try    numSum:= 0;    numCount:= 0;    AGridEh.DataSource.DataSet.Bookmark:= AGridEh.Selection.Rect.TopRow;    if AGridEh.Selection.Rect.LeftCol<>-1 then begin  //区域选择      while (not AGridEh.DataSource.DataSet.Eof) do begin        for i:= AGridEh.Selection.Rect.LeftCol to AGridEh.Selection.Rect.RightCol do begin         //这样实现的话,在调整了列位置时就出问题啦  //        if AGridEh.DataSource.DataSet.Fields[i].DataType in [ftSmallint, ftInteger, ftWord,ftBoolean, ftFloat, ftCurrency, ftBCD,ftLargeint] then begin  //          if AGridEh.DataSource.DataSet.Fields[i].Value<>null then begin  //            numSum:= numSum+ AGridEh.DataSource.DataSet.Fields[i].Value;  //            inc(numCount);  //          end;  //        end;          if AGridEh.Fields[i].DataType in [ftSmallint, ftInteger, ftWord,ftBoolean, ftFloat, ftCurrency, ftBCD,ftLargeint] then begin            if AGridEh.Fields[i].Value<>null then begin              numSum:= numSum+ AGridEh.Fields[i].Value;              Inc(numCount);            end;          end;        end;        if AGridEh.DataSource.DataSet.Bookmark=AGridEh.Selection.Rect.BottomRow then Break;        AGridEh.DataSource.DataSet.Next;      end;    end else if AGridEh.SelectedRows.Count>0 then begin //行级选择      AGridEh.SelectedRows.DataSet.First;      while not AGridEh.SelectedRows.DataSet.Eof do begin        for i:= 0 to AGridEh.VisibleColCount-1 do begin          if AGridEh.Fields[i].DataType in [ftSmallint, ftInteger, ftWord,ftBoolean, ftFloat, ftCurrency, ftBCD,ftLargeint] then begin            if AGridEh.Fields[i].Value<>null then begin              numSum:= numSum+ AGridEh.Fields[i].Value;              Inc(numCount);            end;          end;        end;        AGridEh.SelectedRows.DataSet.Next;      end;    end else Exit;  finally    //AGridEh.DataSource.DataSet.GotoBookmark(bookMark);    //AGridEh.DataSource.DataSet.Bookmark:= bookMark;    AGridEh.DataSource.DataSet.EnableControls;    AGridEh.DataSource.DataSet.GotoBookmark(CurbookMark);    AGridEh.DataSource.DataSet.AfterScroll:= aAfterScroll;    AGridEh.DataSource.DataSet.BeforeScroll:= aBeforeScroll;    //AGridEh.DataSource.DataSet.GotoBookmark(CurbookMark);    //AGridEh.DataSource.DataSet.GotoBookmark(bookMark);    //AGridEh.DataSource.DataSet.EnableControls;//    AGridEh.DataSource.DataSet.BeforeScroll:= aBeforeScroll;//    AGridEh.DataSource.DataSet.AfterScroll:= aAfterScroll;  end;  if numCount>1 then begin    strMsg:= Format('求和=%f  平均数=%f  计数=%d',[numSum,numSum/numCount,numCount]);    mmo1.Lines.Add(strMsg);  end else begin    mmo1.Lines.Add('nothing can be calceturated!');  end;end;