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


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

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

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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

















[此贴子已经被作者于2021/5/22 9:15:39编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(xndd) 厉害,专门给bs端用的吗  发帖心情 Post By:2020/7/24 10:34:00 [显示全部帖子]

转成json格式,至于怎么用,可以自行决定,不一定是bs,cs也能用json的

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/11/4 14:43:00 [显示全部帖子]

回复楼上:

父函数里,已经把jo2传递进去给内部函数,
内部函数用jo来承接了
[此贴子已经被作者于2022/11/4 14:43:36编辑过]

 回到顶部