DELPHI中的三方控件DBGRIDEH,怎么实现拉动鼠标选中多行,汇总选中的记录。就像EXCEL一样实现汇总功能,并不是汇总全部记录,只汇总选中记录

解决方案 »

  1.   


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with adoquery1 do
      begin
        adoconnection1.Open;
        active:=false;
        sql.Clear;
        sql.Text:='select * from mysum';
        active:=true;
      end;end;procedure TForm1.Button1Click(Sender: TObject);
    var
      i,sum:integer;//sum为总数
    begin
      sum:=0;
      for i:=0 to dbgrideh1.SelectedRows.Count-1 do
      begin
        adoquery1.Book:=dbgrideh1.SelectedRows[i];
        inc(sum,adoquery1.fieldbyname('mycount').asinteger) ;
        showmessage(inttostr(sum));
      end;
      button1.caption:=inttostr(sum);
    end;先select出来 在做个循环累加 dbgrideh的dgrowselect=true dgmultiselect=true
      

  2.   

    楼上的,这样我知道,问题是我要像EXCEL一样,用鼠标拉动GRID进行多选,同时进行对选中的记录进行汇总
      

  3.   

    个人觉得问题关键是怎么实现用鼠标拉动grid进行多选
      

  4.   

    用鼠标拉动GRID进行多选已经实现了,是不知道怎么进行类似EXCEL一样的统计而已
      

  5.   

    是不是多选后立刻自动统计出所选数据的总值? 
    这样的话在DBGrideh的OnSelectionChanged事件中写
    参考下面代码 希望有帮助procedure TForm1.DBGridEh1SelectionChanged(Sender: TObject);
    var
      i,sum:integer;//sum为总数
    begin
      sum:=0;
      for i:=0 to dbgrideh1.SelectedRows.Count-1 do
      begin
        adoquery1.Book:=dbgrideh1.SelectedRows[i];
        inc(sum,adoquery1.fieldbyname('mycount').asinteger) ;
      end;
      button1.caption:=inttostr(sum);
    end;
      

  6.   

    我现在就是这样做的,可是这样做的话,GRID的滚动条就会滚来滚去,如果统计的记录一多,操作起来就很难看,而且这样只能向下统计,向上统计还要进行处理一下。
      

  7.   

    楼上的,ONMOUSEUP里写是可以解决问题,不过不够完善,不能像EXCEL中一样,鼠标拉到哪里统计到哪里,不够实时灵活,一定要MOUSEUP才会显示统计结果,跟我想要的EXCEL效果不一样
      

  8.   

    和这个一样
    http://topic.csdn.net/u/20090817/15/cac889b4-4e7b-47d1-ae4d-eaf5cfdf3f70.html?82004