找回密码
 立即注册

QQ登录

只需一步,快速开始

stufot

金牌服务用户

3

主题

10

帖子

53

积分

金牌服务用户

积分
53

微信认证勋章

QQ
stufot
金牌服务用户   /  发表于:2016-4-26 09:47  /   查看:7168  /  回复:14
使用Dataset数据源绑定,实现有三个层级,每一个层级的数据结构相同。上一层级的数据是下一层级数据汇总或者公式计算的关系。

请问如何实现:
修改第三个层级的数据,第二层级和第一层级的数据自动更新,确认后提交到数据库?

14 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-27 11:11:23
推荐
您好,第一个问题原因还在调查,现有的解决方案是前端调用update
  1.     <script lang="javascript" type="text/javascript">
  2.         window.onload = function () {
  3.             var spread1 = document.getElementById("<%=FpSpread1.ClientID %>");
  4.             if (document.all) {
  5.                 // IE
  6.                 if (spread1.addEventListener) {
  7.                     // IE9
  8.                     spread1.addEventListener("ActiveCellChanged", cellChanged, false);
  9.                 } else {
  10.                     // Other versions of IE and IE9 quirks mode (no doctype set)
  11.                     spread1.onActiveCellChanged = cellChanged;
  12.                 }
  13.             }
  14.             else {
  15.                 // Firefox
  16.                 spread1.addEventListener("ActiveCellChanged", cellChanged, false);
  17.             }

  18.             function cellChanged(event) {
  19.                spread1.Update();
  20.             }
  21.         }
  22.    
  23. </script>
复制代码

第二点的还没有好的解决方案,有一个办法是每次重新计算赋值。但是还需要递归向上。我继续看下,先给您个反馈。
  1.    e.SheetView.ColumnHeader.Visible = false;
  2.             e.SheetView.Columns[0].Width = 48;
  3.             if (e.SheetView.RelationName == "Second")
  4.             {
  5.                 e.SheetView.Columns[0].Width = 6;
  6.             }
  7.             int total = 0;
  8.             for (int i = 0; i < e.SheetView.RowCount; i++)
  9.             {
  10.                 total += (int)e.SheetView.Cells[i, 3].Value;
  11.                 e.SheetView.Cells[i, 4].Formula = "D" + (i + 1).ToString() + "*10";
  12.             }
  13.             e.SheetView.Parent.Cells[e.SheetView.ParentRowIndex, 3].Value = total;
复制代码
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-26 11:11:23
沙发
不好意思,没有很明白您的需求,您是希望在Spread绑定的时候实现三个层级还是别的什么意思?
回复 使用道具 举报
stufot
金牌服务用户   /  发表于:2016-4-26 11:31:36
板凳
本帖最后由 stufot 于 2016-4-26 11:33 编辑

比如附件图中,做了三个层级。
第一个层级的总价等于该数据的所有第二级的总价的和。
第二个层级的总价等于该数据的所有第三层级的总价的和。

修改第三层级的总价,第二层级的总价、第一层级的总价,自动计算更新。

这个需求能实现吗?
spread表格多层级数据联动.png
回复 使用道具 举报
stufot
金牌服务用户   /  发表于:2016-4-26 11:34:51
地板
dexteryao 发表于 2016-4-26 11:11
不好意思,没有很明白您的需求,您是希望在Spread绑定的时候实现三个层级还是别的什么意思?

比如附件图中,做了三个层级。
第一个层级的总价等于该数据的所有第二级的总价的和。
第二个层级的总价等于该数据的所有第三层级的总价的和。

修改第三层级的总价,第二层级的总价、第一层级的总价,自动计算更新。

这个需求能实现吗?

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-26 11:57:07
5#
1. 求和可以通过公式实现,代码设置好公式。
FpSpread1.Cells[0, 2].Formula = "SUM(A1:A3)";
2. 实现客户端求和自动更新
  1. FpSpread1.Sheets[0].AutoCalculation = true;
  2. FpSpread1.ClientAutoCalculation = true;
复制代码
回复 使用道具 举报
stufot
金牌服务用户   /  发表于:2016-4-26 13:33:22
6#
dexteryao 发表于 2016-4-26 11:57
1. 求和可以通过公式实现,代码设置好公式。
FpSpread1.Cells[0, 2].Formula = "SUM(A1:A3)";
2. 实现客 ...

这两点都知道。但是问题是:
1、第一层级如何获取第二层级的单元格的值。
2、点击层级的加号后,公式的就不能自动计算了。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-26 15:25:58
7#
您看下这边博客 http://blog.gcpowertools.com.cn/ ... groupheaderrow.aspx
通过获取到分组g.Rows,计算total然后显示出来。
如果方便的发个您模板的demo上来,这样我这边处理也会方便很多。
回复 使用道具 举报
stufot
金牌服务用户   /  发表于:2016-4-26 16:59:58
8#
dexteryao 发表于 2016-4-26 15:25
您看下这边博客 http://blog.gcpowertools.com.cn/post/2013/11/23/spread_asp_customize_groupheaderrow.a ...

遇到问题:
1、点击加号,展开下级数据,页面自动计算失效,需要点击表格的提交按钮才能更新。
2、想实现:父级的UserCount为了级的UserCount的和,如何实现?
spread表格多层级数据联动-V2.png

Spread.Web.rar

3.76 KB, 下载次数: 150

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-26 17:17:56
9#
问题我已经重现出来,正在寻求解决方案,有结果会立刻给你答复。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部