以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 统计问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=151333) |
-- 作者:BG小白 -- 发布时间:2020/6/20 20:55:00 -- 统计问题 假如表有4列,第一列单号,第二列门店名称,第三列数量,第四列金额,我想相同把门店名称的金额合计和数量合计还有单子的数量合计,按照金额排名,取前十显示在一个临时表,该怎么操作呢?我现在做了一个统计表,但是统计表不能排序,我又增加了一个新临时表,然后可以排序,但是无法控制行数,而且加载速度很慢。 Dim g As New GroupTableBuilder("QTXPDHJ", DataTables("SG_Gathering")) g.Groups.AddDef("vShop") g.Totals.AddDef("fQuantity") g.Totals.AddDef("fRealMoney") g.Totals.AddDef("vMBillID", AggregateEnum.Count) g.FromServer = False g.Build() Dim dt As DataTable = DataTables("DPXSPHB") dt.DataRows.Clear Dim Cols1() As String = {"vShop","fQuantity","fRealMoney","vMBillID"} Dim Cols2() As String = {"MDDM","XSSL","XSJE","XSDS"} For Each dr1 As DataRow In DataTables("QTXPDHJ").Select("fRealMoney > 1","fRealMoney desc") Dim dr2 As DataRow = DataTables("DPXSPHB").AddNew() For i As Integer = 0 To Cols1.Length -1 dr2(Cols2(i)) = dr1(Cols1(i)) Next Next [此贴子已经被作者于2020/6/21 5:47:08编辑过]
|
-- 作者:BG小白 -- 发布时间:2020/6/21 6:06:00 -- 加载速度慢是因为我在表属性加了跨表引用和计算,如果不加就快很多 If e.DataCol.Name = "MDDM" Then \'如果内容发生变动的是品名列 If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空 e.DataRow("MDMC") = Nothing \'那么清空此行单价列的内容 Else Dim dr As DataRow \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr dr = DataTables("kehu").Find("[KHDM] = \'" & e.NewValue & "\'") If dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing e.DataRow("MDMC") = dr("KHMC") End If End If End If Dim exp As String = "[XSSL] / [XSDS]" Dim drs As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs dr("LDL") = Eval(exp,dr) Next Dim exp1 As String = "[XSJE] / [XSDS]" Dim drs1 As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs1 dr("KDJ") = Eval(exp1,dr) Next [此贴子已经被作者于2020/6/21 6:11:09编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/6/21 21:05:00 -- 这2段也是datacolchanged事件里的代码? Dim exp As String = "[XSSL] / [XSDS]" Dim drs As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs dr("LDL") = Eval(exp,dr) Next Dim exp1 As String = "[XSJE] / [XSDS]" Dim drs1 As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs1 dr("KDJ") = Eval(exp1,dr) Next |
-- 作者:BG小白 -- 发布时间:2020/6/22 8:55:00 -- 1楼的代码是按钮,2楼的代码是在表datacolchanged事件里的 Dim exp As String = "[XSSL] / [XSDS]" Dim drs As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs dr("LDL") = Eval(exp,dr) Next Dim exp1 As String = "[XSJE] / [XSDS]" Dim drs1 As List(of DataRow) = DataTables("DPXSPHB").Select("XSDS > 1") For Each dr As DataRow In drs1 dr("KDJ") = Eval(exp1,dr) Next datacolchanged事件里的代码
|
-- 作者:有点蓝 -- 发布时间:2020/6/22 9:21:00 -- 如果是在表datacolchanged事件里,有2个问题, 1、看看:http://www.foxtable.com/webhelp/topics/1522.htm,给任何一个单元格赋值都会触发这段代码 2、没有必要循环 select case e.datacol.name case "XSSL","XSDS" if e.datarow("XSDS") > 1 then e.datarow("LDL") = e.datarow("XSSL") / e.datarow("XSDS") end if end select select case e.datacol.name case "XSJE","XSDS" if e.datarow("XSDS") > 1 then e.datarow("KDJ") = e.datarow("XSJE") / e.datarow("XSDS") end if end select |
-- 作者:BG小白 -- 发布时间:2020/6/22 16:01:00 -- 谢谢蓝老师,我一楼还有个问题,麻烦你再帮我看下 假如表有4列,第一列单号,第二列门店名称,第三列数量,第四列金额,我想把相同门店名称的金额合计和数量合计还有单子的数量合计,按照金额排名,取前十显示在一个临时表,该怎么操作呢?我现在做了一个统计表,但是统计表不能排序,我又增加了一个新临时表,然后可以排序,但是无法控制行数
[此贴子已经被作者于2020/6/22 16:01:22编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/6/22 16:16:00 -- 请上传实例说明 |
-- 作者:BG小白 -- 发布时间:2020/6/22 16:35:00 -- 以下是引用有点蓝在2020/6/22 9:21:00的发言:
如果是在表datacolchanged事件里,有2个问题, 1、看看:http://www.foxtable.com/webhelp/topics/1522.htm,给任何一个单元格赋值都会触发这段代码 2、没有必要循环 select case e.datacol.name case "XSSL","XSDS" if e.datarow("XSDS") > 1 then e.datarow("LDL") = e.datarow("XSSL") / e.datarow("XSDS") end if end select select case e.datacol.name case "XSJE","XSDS" if e.datarow("XSDS") > 1 then e.datarow("KDJ") = e.datarow("XSJE") / e.datarow("XSDS") end if end select 用了这个代码后,提示.NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.5.29.8 错误所在事件:表,DPXSPHB,DataColChanged 详细错误信息: 调用的目标发生了异常。 从字符串“”到类型“Double”的转换无效。 输入字符串的格式不正确。 KDJ和LDL,我是用的高精度小数,因为只是想显示两位,显示都没有问题,就是报错 |
-- 作者:有点蓝 -- 发布时间:2020/6/22 16:36:00 -- "XSSL","XSDS""XSJE"这些是字符列? |
-- 作者:BG小白 -- 发布时间:2020/6/22 16:38:00 -- 是的 |