以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [分享]把组合统计结果的fxDataSource(既是原生System.Data.DataTable)转json输出给前端,解决BS开发模式下此强大的多表联查工具只能用在C/S领域table组件的局限性 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=152726) |
|||||||||||||||||||||||||||||||||||
-- 作者:chen37280600 -- 发布时间:2020/7/20 10:31:00 -- [分享]把组合统计结果的fxDataSource(既是原生System.Data.DataTable)转json输出给前端,解决BS开发模式下此强大的多表联查工具只能用在C/S领域table组件的局限性
(在2021.4.29版本后,官方已经增加组合查询直转DataTable的方法,新版本用户不需要学习本帖子)
一、发现需求: 此主题相关图片如下:0.png
二、实现需求:
新建2个内部函数,即可完成这种类型的数据一键转Json
1.fxTable2Json
以下内容只有回复后才可以浏览
2.fxRow2JObject
四、有意思的扩展尝试:
五、进一步修饰结果:
基于这个统计效果,我们讲解各种修饰方法
5.1修改内容 For Each dr As Data.DataRow In dt1.Rows dr("型号") = "aaa"
Next 做二次运算注意的坑 1. 当统计出来的列是空值时,例如这里的第1行的dr("退货数量")是空值,它是不能直接参与预算的,因为它是原生的DBNull.Value,不支持任何运算。 2. 狐表平时的DataRow能运算,是因为官方帮我们做了一层封装,空值自动转0 For Each dr As Data.DataRow In dt1.Rows //错误写法,会如下图报错,什么DBNull不支持运算符之类的 dr("退货总金额") = dr("退货数量") * dr("退货金额") //正确写法 dr("退货总金额") = Val(dr("退货数量").ToString) * Val(dr("退货金额").ToString) Next 5.2.添加数据列
If dt1.Columns.Contains("新列") =False Then
dt1.Columns.Add("新列",Gettype(String))
End If
可以添加的类型有以下
(参考官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datacolumncollection.add?view=netframework-4.0
)
5.3添加表达式列
注意可以配合公式使用,例如IIF()、IsNull()
If dt1.Columns.Contains("利润") =False Then
dt1.Columns.Add("利润",Gettype(Decimal),"IsNull(销售_金额,0) -
IsNull(进货_金额)")
End If
5.4添加行 注意一下,是先创建该表的1个行对象,然后再把对象添加到行集合,2步走,跟狐表平时的用法有不同! Dim dr As Data.DataRow = dt.NewRow //第一步创建独立 行对象 dr("型号") = "aaa" dt.Rows.Add(dr) //第二步把 行对象 添加到 行集合 Output.show(dt.Rows.Count) //得到结果是1 ===============================================================
顺便总结以前分享过的帖子,方便大家学习
联系QQ:2385350359
[此贴子已经被作者于2024/6/5 18:09:04编辑过]
|
|||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/7/20 10:47:00 -- 多谢分享! |
|||||||||||||||||||||||||||||||||||
-- 作者:happy2010 -- 发布时间:2020/7/20 10:47:00 -- 学习了 |
|||||||||||||||||||||||||||||||||||
-- 作者:liufucan -- 发布时间:2020/7/20 11:48:00 -- 杰哥真是好人哪 |
|||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/7/20 12:03:00 -- 可以把fxDataSource 当做是.net的System.Data.datatable来使用的 Dim g As New GroupTableBuilder("统计表1", DataTables("订单")) g.Groups.AddDef("日期", DateGroupEnum.Quarter, "季度") g.Totals.AddDef("数量", "本季度_销量") g.Totals.AddDef("数量", "截止本季度_销量",True) Dim dt As fxDataSource = g.BuildDataSource For Each r As Data.DataRow In dt.Rows output.show(r("本季度_销量")) Next For Each c As Data.DataColumn In dt.Columns output.show(c.ColumnName) Next |
|||||||||||||||||||||||||||||||||||
-- 作者:WELOVEFOX -- 发布时间:2020/7/20 12:04:00 -- 学习一下,谢谢 |
|||||||||||||||||||||||||||||||||||
-- 作者:aix -- 发布时间:2020/7/20 12:40:00 -- 学习 |
|||||||||||||||||||||||||||||||||||
-- 作者:laipiwen -- 发布时间:2020/7/22 9:10:00 -- 学习了 |
|||||||||||||||||||||||||||||||||||
-- 作者:linyunu1 -- 发布时间:2020/7/22 10:29:00 -- 学习了 |
|||||||||||||||||||||||||||||||||||
-- 作者:cool314156 -- 发布时间:2020/7/23 13:02:00 -- 学习下 |