起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: liubin

【结】如何实现DATAGRID多行统计**

[复制链接]
发表于 2008-6-19 15:55:59 | 显示全部楼层
用if DataGrid.Items.Selected then 来判断当前行是否被选中
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 16:08:51 | 显示全部楼层
procedure TDOC_BILL.DataGridClick(Sender: TObject);
var
  i, j: Integer;
begin
  if DataGrid.SelectedCount > 0 then
    with DataGrid.DataSource.DataSet do
      for i := 0 to DataGrid.SelectedCount - 1 do
      begin
        if DataGrid.Items.Selected then
        begin
          j := j + FieldByName('F_JS').AsInteger;
          edit1.Text := IntToStr(j);
        end;
      end;

end;

还是不对,首先我是在表现形式上的GRID单击事件写的,其次这个变现形式的数据集是从表(主表已经打开,觉得和这个没关系)版本2401
回复 支持 反对

使用道具 举报

发表于 2008-6-19 16:21:19 | 显示全部楼层
直接从DataGrid中取数据试下
  nSum := 0;
  for i := 0 to DataGrid.Count - 1 do
    if DataGrid.Items.Selected then
    begin
      nSum := nSum + DataGrid.ColumnDefs[2].Field.AsInteger;
    end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 16:29:39 | 显示全部楼层
还是不对,点中一条记录数值对,多选数值就不对,我现在怀疑能不能实现啊,您测试下好不好
回复 支持 反对

使用道具 举报

发表于 2008-6-19 16:47:17 | 显示全部楼层
13楼的代码的确有问题。 还是用10楼的代码吧
  nSum := 0;
    if DataGrid.SelectedCount > 0 then
      with DataGrid.DataSource.DataSet do
        for i := 0 to DataGrid.SelectedCount - 1 do
        begin
          Bookmark := DataGrid.SelectedRows;
          nSum := nSum + Fields[2].AsInteger;
        end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 17:04:46 | 显示全部楼层
BookMark是什么类型的? 干什么用?
回复 支持 反对

使用道具 举报

发表于 2008-6-19 17:09:41 | 显示全部楼层
DataGrid.DataSource.DataSet.BookMark  是书签的意思,用于标记数据集被选中的记录

property Bookmark: string;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 09:47:03 | 显示全部楼层
使用13楼的代码,出现个问题  例如有3条记录
1:13
2:33
3:44
选中1条数值正确,如果选中2条就错误,例如选中1,2条,数值总是最后选中那条数值的2倍,既,先选第一条在,多选第2条,统计的就是66
回复 支持 反对

使用道具 举报

发表于 2008-7-10 10:11:33 | 显示全部楼层
用15楼的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-10 11:14:20 | 显示全部楼层
OK,结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 02:50 , Processed in 0.039233 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表