DBGrid 合计行如何实现 ( 积分: 100 )

  • 主题发起人 主题发起人 chenxp3000
  • 开始时间 开始时间
C

chenxp3000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位同仁:
敝人在项目中由于项目需要,自行开发的一个DBGrid控件(继承TDBGrid),功能主要是用来辅助用户录入一些字典信息,现在做到财务凭证了,希望能编辑状态下有一个合计行在最后一行,这个功能有一些第三方控件也实现了,但是据我了解好像没有开源的。恳请各位赐教,在下感激不尽![:)]
 
各位同仁:
敝人在项目中由于项目需要,自行开发的一个DBGrid控件(继承TDBGrid),功能主要是用来辅助用户录入一些字典信息,现在做到财务凭证了,希望能编辑状态下有一个合计行在最后一行,这个功能有一些第三方控件也实现了,但是据我了解好像没有开源的。恳请各位赐教,在下感激不尽![:)]
 
DBGridEh(Ehlib)有源码:
http://www.2ccc.com/article.asp?articleid=2312
 
据我了解,楼上说得没错
 
Ehlib就很好的,楼上推荐的没错。下载下来看看例子,你会喜欢上它的
 
DBGridEh 方便实现
 
谢谢各位朋友,我下载了(Ehlib),但是发现该单元有两万多行代码!
现在赶项目,没有太多时间去研究它的代码,另外因为我目前编写的一些功能它里面没有,所以也没法直接用的Ehlib,[:)]希望大家给点思路或者是有代码,分不够可以再加!谢谢。
 
如何在最后一行额外再画出一行(合计行),操作员Append时却总在合计行之前加行呢?
还有滚动时合计行不跟着其他行一起滚动呢?
 
设置footerrowcount为1,然后在需要合计的column.footers里加入合计
仔细看看它自带的demo吧,有这个合计行的功能了,不需要你自己写程序。
 
我常用
union
select Sum()
来做最后一行的合计
 
to hongxing_dl:
呵呵,谢谢这位朋友,我会用这个控件(TDBGridEh),我我现在自己写了一个控件,并且封装了一些自己的功能,现在希望能把合计行的功能移植到我们自己写的控件里面(最简单的求和功能就够用来),不知道如何实现,能不能给点算法或者代码呢?谢谢
 
to iamy:
我需要的时在编辑或者录入数据时也要显示合计行,并不是查询统计的一个结果集内显示合计行!用了Union后数据集不能被编辑了!呵呵[:)]
 
做合计行,不能简单地在外部继承,而要修改文件,非常麻烦。
Grids.pas的Paint部分负责画表格线,这个还好处理
DBGrids.pas的TCustomDBGrid.UpdateRowCount部分是设置数据显示行数的,要限制数据行数,腾出合计行的位置,这是关键。
DBGrids.pas的TCustomDBGrid.DrawCell部分负责画格子内容的,要加上负责画合计行。
如果只是要DBGrid做满格显示,则很简单。
不过要真正实现合计行,还要加上合计行处理程序,工作量与DBGridEh1.0差不多,还不如直接使用DBGridEh
 
谢谢 kinneng,大家有没有别的意见呢?
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=2714

KeyLife富翁笔记
作者?: 刀剑如梦
标题?: DBGrid列自动求和
关键字: DBGrid、自动求和
分类?: 个人专区
密级?: 公开
(评分: , 回复: 0, 阅读: 541) »»
先在你的数据集上(QUERY,TABLE)等双击再NEW加上你想要的字段(如MyData)
类型Real,属性是Calculated
在代码中你用
Query.FieldByName('MyData').AsFloat := Query.FieldByName('MyData1').AsFloat+
Query.FieldByName('MyData').AsFloat;
 
to xianguo:
我要的时纵向求和,不是横向求和!
 
加一个字段totalCount,类型Real或integer
属性是Calculated
在数据集的Calculates事件中
Query.FieldByName(totalCount).AsFloat := Query.FieldByName('totalCount').AsFloat+
Query.FieldByName('你想要合计的字段').AsFloat;
 
num := Query1.RecordCount;
count := 0;

for i := 1 to num do
begin
count := count + Query1.FieldByName('你所想求的纵列名').Value;
Query1.Next;
end;

edit1.Text := IntToStr(count);
 
谢谢各位的参与,我希望的是能在DBGrid中画一个合计行,然后对指定的字段值进行Sum,并且希望能够在数据录入和编辑状态下都能看到合计行求和数值的变化。[:)]
 
哎,谢谢大家!这么长时间了,发言的人很少!
结贴了!问题还是没有解决[:(]
 
后退
顶部