以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 计算问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=186677) |
-- 作者:lin98 -- 发布时间:2023/5/19 13:40:00 -- 计算问题 NET Framework 版本:4.0.30319.42000 Foxtable 版本:2022.8.18.1 错误所在事件:表,GG, DataColChanged 详细错误信息: 调用的目标发生了异常。 索引超出范围。必须为非负值并小于集合大小。 参数名: index Select Case e.DataCol.Name Case "第一列", "第二列" Dim dr As DataRow Dim drs As List(Of DataRow) dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") If dr Is Nothing Then e.DataRow("计算一") = 0 dr = e.DataRow End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 drs(i)("计算一") = drs(i - 1)("第一列") + drs(i - 1)("第二列") drs(i)("计算二") = drs(i - 2)("第一列") + drs(i - 1)("第二列") Next End Select 代码想实现: 计算一、计算二这2列,首2行不做计算,也就从第3行起开始做计算 第3行("计算一") = 上一行的("第一列") + ("第二列"),也就("第一列") + ("第二列")的第2行 第3行("计算二") = 前一行("第一列") + ("第二列"),也就("第一列") + ("第二列")的第1行 第4行("计算一") = 上一行的("第一列") + ("第二列"),也就("第一列") + ("第二列")的第3行 第4行("计算二") = 前一行("第一列") + ("第二列"),也就("第一列") + ("第二列")的第2行 以此类推 [此贴子已经被作者于2023/5/19 16:56:12编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/5/19 14:05:00 -- 获取上一行 Dim dr As DataRow dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") 获取前一行,也就是上一行的上一行 Dim dr2 As DataRow 定义前一行变量 if dr isnot nothing then 判断是否有上一行 dr2 = e.DataTable.Find("[_SortKey] < " & dr("_SortKey"), "[_SortKey] Desc") endif
|
-- 作者:lin98 -- 发布时间:2023/5/19 15:02:00 -- \'获取上一行 Select Case e.DataCol.Name Case "第一列", "第二列" Dim dr As DataRow Dim drs As List(Of DataRow) dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") \'找出上一行 Dim dr2 As DataRow \'定义前一行变量 If dr IsNot Nothing Then \'判断是否有上一行 dr2 = e.DataTable.Find("[_SortKey] < " & dr("_SortKey"), "[_SortKey] Desc") End If If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行 e.DataRow("计算一") = 0 dr = e.DataRow End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 \'重算余下行的 drs(i)("计算一") = drs(i - 1)("第一列") + drs(i - 1)("第二列") drs(i)("计算二") = drs(i - 1)("第一列") + drs(i - 1)("第二列") Next End Select |
-- 作者:有点蓝 -- 发布时间:2023/5/19 15:39:00 -- drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 \'重算余下行的 drs(i)("计算一") = drs(i - 1)("第一列") + drs(i - 1)("第二列") if i > 1 then drs(i)("计算二") = drs(i - 2)("第一列") + drs(i - 1)("第二列") end if Next |