(快速浏览杰哥分享过的所有经验汇总,点击跳转) |
|
(在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
===============================================================
顺便总结以前分享过的帖子,方便大家学习
[此贴子已经被作者于2024/6/5 18:09:04编辑过]
可以把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