Foxtable(狐表)用户栏目专家坐堂 → 检测 identify列


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

主题:检测 identify列

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


加好友 发短信
等级:八尾狐 帖子:1842 积分:19823 威望:0 精华:0 注册:2013/4/10 14:38:00
检测 identify列  发帖心情 Post By:2025/4/22 17:26:00 [只看该作者]

为什么会没有这列?


图片点击可在新窗口打开查看此主题相关图片如下:identyfy.jpg
图片点击可在新窗口打开查看


而下面这样又可以正常显示

图片点击可在新窗口打开查看此主题相关图片如下:identyfy2.jpg
图片点击可在新窗口打开查看

因为我要生成一个带 主键的 json


output.Show(DataTables("订单").DataRows(0)("_Identify"))

Dim names() As String = {"id", "cp", "kh", "gy", "sl", "dj", "zk", "je", "rq"}
Dim caps() As String = {"_Identify", "产品", "客户", "雇员", "数量", "单价", "折扣", "金额", "日期"}
Dim zd As New Dictionary(Of String, String)
For i As Integer = 0 To names.Length - 1
    zd.Add(names(i), caps(i))
Next
'生成json数据
Dim t As DataTable = DataTables("订单")
Dim arr As New JArray '数据记录数组

For i As Integer = 0 To 1
    'For i As Integer = 0 To t.DataRows.Count - 1 '遍历datatable记录
    arr.Add(New jobject) '每遍历一条记录就增加一个对象,以保存记录数据
    Dim r As DataRow = t.DataRows(i)
    For Each key As String In zd.Keys
        
        Output.Show(key)
        Output.Show(zd(key))
        t.DataCols(zd(key)).DataType.ToString
                Select Case t.DataCols(zd(key)).DataType.ToString
                    Case "system.string"
                        If r.IsNull(zd(key)) Then
                            arr(i)(key) = ""
                        Else
                            arr(i)(key) = CStr(r(zd(key)))
                        End If
        
                    Case "system.boolean"
                        arr(i)(key) = CBool(r(zd(key)))
        
                    Case "system.datetime"
                        If r.IsNull(zd(key)) Then
                            arr(i)(key) = ""
                        Else
                            arr(i)(key) = CStr(r(zd(key)))
                        End If
                    Case "system.byte", "system.int16", "system.int32", "system.int64", "system.single", "system.double", "system.decimal"
                        If r.IsNull(zd(key)) Then
                            arr(i)(key) = 0
                        Else
                            arr(i)(key) = Val(r(zd(key)))
                        End If
                End Select 
    Next
Next
Dim obj As New JObject '创建一个新对象obj
obj("total") = t.DataRows.Count '在obj中以total保存记录总数
obj("rows") = arr '在obj中以rows保存记录数组
Output.Show(CompressJson(obj)) '将obj压缩后输出
[此贴子已经被作者于2025/4/22 17:29:10编辑过]

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


加好友 发短信
等级:超级版主 帖子:113541 积分:578206 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/22 17:40:00 [只看该作者]

系统列是无法直接遍历的

可以这样用
DataTables("订单").basetable.Columns("_Identify")

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


加好友 发短信
等级:八尾狐 帖子:1842 积分:19823 威望:0 精华:0 注册:2013/4/10 14:38:00
  发帖心情 Post By:2025/4/22 22:12:00 [只看该作者]

 因为原来用的是中文字段,按杰哥的方法把datatable方法直接转成json格式,name是中文,在微信小程序的列表渲染中会报错,所以在做成英文name,
在论坛抄了下源代码

以后设计表时尽量用英文字段

datatables2json

 

Dim names() As String = {"id", "cp", "kh", "gy", "sl", "dj", "zk", "je", "rq"}

Dim caps() As String = {"_identify", "产品", "客户", "雇员", "数量", "单价", "折扣", "金额", "日期"}

Dim zd As New Dictionary(Of String, String)

For i As Integer = 0 To names.Length - 1

    zd.Add(names(i), caps(i))

Next

'生成json数据

Dim t As DataTable = DataTables("订单")

Dim arr As New JArray '数据记录数组

For i As Integer = 0 To t.DataRows.Count - 1 '遍历datatable记录

    arr.Add(New jobject) '每遍历一条记录就增加一个对象,以保存记录数据

    Dim r As DataRow = t.DataRows(i)

    For Each key As String In zd.Keys

        If key = "id" Then

            arr(i)("id") = val(r(zd(key)))

        Else If t.DataCols(zd(key)).IsString Then

        If r.isnull(zd(key)) Then

            arr(i)(key) = ""

        Else

            arr(i)(key) = CStr(r(zd(key)))

        End If

        

        Else If t.DataCols(zd(key)).IsNumeric Then

        If r.isnull(zd(key)) Then

            arr(i)(key) = 0

        Else

            arr(i)(key) = val(r(zd(key)))

        End If

        

        Else If t.DataCols(zd(key)).IsBoolean Then

        arr(i)(key) = CBool(r(zd(key)))

        

        Else If t.DataCols(zd(key)).IsDate Then

            If r.isnull(zd(key)) Then

                arr(i)(key) = ""

            Else

                arr(i)(key) = CStr(r(zd(key)))

            End If

        End If

        

    Next

Next

Dim obj As New JObject '创建一个新对象obj

obj("total") = t.DataRows.Count '在obj中以total保存记录总数


 回到顶部