Foxtable(狐表)用户栏目专家坐堂 → [分享]把组合统计结果的fxDataSource(既是原生System.Data.DataTable)转json输出给前端,解决BS开发模式下此强大的多表联查工具只能用在C/S领域table组件的局限性


  共有42156人关注过本帖树形打印复制链接

主题:[分享]把组合统计结果的fxDataSource(既是原生System.Data.DataTable)转json输出给前端,解决BS开发模式下此强大的多表联查工具只能用在C/S领域table组件的局限性

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
[分享]把组合统计结果的fxDataSource(既是原生System.Data.DataTable)转json输出给前端,解决BS开发模式下此强大的多表联查工具只能用在C/S领域table组件的局限性  发帖心情 Post By:2020/7/20 10:31:00 [只看该作者]

(快速浏览杰哥分享过的所有经验汇总,点击跳转


(在2021.4.29版本后,官方已经增加组合查询直转DataTable的方法,新版本用户不需要学习本帖子)

一、发现需求:

此主题相关图片如下:0.png
按此在新窗口浏览图片



二、实现需求:

新建2个内部函数,即可完成这种类型的数据一键转Json

1.fxTable2Json

以下内容只有回复后才可以浏览


2.fxRow2JObject


以下内容只有回复后才可以浏览

三、使用效果:


此主题相关图片如下:1.png
按此在新窗口浏览图片


此主题相关图片如下:2.png
按此在新窗口浏览图片


四、有意思的扩展尝试:


此主题相关图片如下:3.png
按此在新窗口浏览图片


此主题相关图片如下:4.png
按此在新窗口浏览图片

五、进一步修饰结果:

此主题相关图片如下:1.png
按此在新窗口浏览图片

基于这个统计效果,我们讲解各种修饰方法

此主题相关图片如下:2.png
按此在新窗口浏览图片

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


此主题相关图片如下:60641b8f8b1be.png
按此在新窗口浏览图片


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 )
 名称     .net类型     对应狐表类型 
 字符串(常用)   System.String    String
 日期时间(常用)    System.DateTime    Date
 逻辑值(常用)     System.Boolean     Boolean
 微整数     System.Byte     Byte
 短整数     System.Int16     Short
 整数(常用)     System.Int32      Integer
 长整数     System.Int64    Long
 单精度小数     System.Single     Single
 双精度小数     System.Double     Double
 高精度小数(常用)     System.Decimal     Decimal


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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110544 积分:562604 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/20 10:47:00 [只看该作者]

多谢分享!

 回到顶部
帅哥哟,离线,有人找我吗?
happy2010
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:232 积分:2287 威望:0 精华:0 注册:2016/10/9 16:10:00
  发帖心情 Post By:2020/7/20 10:47:00 [只看该作者]

学习了

 回到顶部
帅哥哟,离线,有人找我吗?
liufucan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:649 积分:5730 威望:0 精华:0 注册:2017/4/7 12:15:00
  发帖心情 Post By:2020/7/20 11:48:00 [只看该作者]

杰哥真是好人哪

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110544 积分:562604 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:466 积分:3382 威望:0 精华:0 注册:2016/12/21 22:58:00
  发帖心情 Post By:2020/7/20 12:04:00 [只看该作者]

学习一下,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
aix
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:210 积分:6210 威望:0 精华:0 注册:2012/4/29 13:09:00
  发帖心情 Post By:2020/7/20 12:40:00 [只看该作者]

 学习

 回到顶部
帅哥哟,离线,有人找我吗?
laipiwen
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:382 积分:2882 威望:0 精华:0 注册:2015/4/29 11:50:00
  发帖心情 Post By:2020/7/22 9:10:00 [只看该作者]

学习了

 回到顶部
帅哥哟,离线,有人找我吗?
linyunu1
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1089 威望:0 精华:0 注册:2020/1/16 11:58:00
  发帖心情 Post By:2020/7/22 10:29:00 [只看该作者]

学习了

 回到顶部
帅哥哟,离线,有人找我吗?
cool314156
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:374 积分:3277 威望:0 精华:0 注册:2018/1/12 10:54:00
  发帖心情 Post By:2020/7/23 13:02:00 [只看该作者]

学习下

 回到顶部
总数 80 1 2 3 4 5 6 7 8 下一页