Foxtable(狐表)用户栏目专家坐堂 → 请教 遍历中止的问题


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

主题:请教 遍历中止的问题

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


加好友 发短信
等级:六尾狐 帖子:1421 积分:11294 威望:0 精华:0 注册:2008/9/1 22:20:00
请教 遍历中止的问题  发帖心情 Post By:2019/5/10 15:07:00 [只看该作者]

遇到蹊跷现象,调用接口获取企业微信用户列表,然后写入本地用户表,感觉人数不对,经过排查,获取到的人员是齐全的,但在遍历userlist时,一旦进入else执行新增行后就不循环了,不知何故。
    
    Dim jo As JObject = JObject.Parse(hc.GetData())
    
    If jo("errcode") = "0" Then
        Dim nms() As String = {"userid","name","position","mobile","gender","email","weixinid","avatar","status"}
        Dim nms1() As String = {"name","position","mobile","gender","email","weixinid","avatar","status"}
        For Each jt As JToken In jo("userlist")
            Dim dr As DataRow = DataTables("Users").Find("userid = '" & jt("userid").Tostring & "'")
            If dr IsNot Nothing Then
                For Each nm As String In nms1
                    dr(nm) = jt(nm)
                Next
            Else           '遍历一旦进入else,新增行结束后,代码就不执行了,好像不在进入next,
                Dim dr0 As DataRow = DataTables("Users").AddNew()
                For Each nm As String In nms
                    dr0(nm) = jt(nm)
                Next
            End If
        Next
        DataTables("Users").Save()
    Else
        MessageBox.Show(jo.ToString)
    End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/10 15:57:00 [只看该作者]

1、手动addnew一行,然后用代码赋值,是否正常?

 

2、是addnew之后不行,还是赋值之后不行?加入msgbox,看弹出到哪里。


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


加好友 发短信
等级:六尾狐 帖子:1421 积分:11294 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2019/5/10 16:08:00 [只看该作者]

单独测试以下代码,弹出值都正常,就是执行到开始赋值 dr0(nm) = jt(nm) 的时候到了某个字段就出错(此时 nm值 为 avatar)
System.NullReferenceException: 未将对象引用设置到对象的实例。在 UserCode.Test()

            For Each nm As String In nms
                messagebox.Show(nm)
                messagebox.Show(jt(nm))
                'dr0(nm) = jt(nm)
            Next
[此贴子已经被作者于2019/5/10 16:11:32编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/10 16:22:00 [只看该作者]

 

弹出值正常,那就是你datacolchanged事件有问题,注释你事件代码后测试

 

 


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


加好友 发短信
等级:六尾狐 帖子:1421 积分:11294 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2019/5/10 16:51:00 [只看该作者]

表事件没有任何代码,也没有其他逻辑,就是简单的获取数据然后判断新增还是修改,写入user表就行。
而且System.NullReferenceException: 未将对象引用设置到对象的实例。UserCode.Test(),这个报错与其它空引用有点不同。
个人感觉是不是系统问题。

[此贴子已经被作者于2019/5/10 17:16:00编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/10 18:33:00 [只看该作者]

加入msgbox弹出值看看,弹出什么的时候报错?

 

    Dim jo As JObject = JObject.Parse(hc.GetData())
    
    If jo("errcode") = "0" Then
        Dim nms() As String = {"userid","name","position","mobile","gender","email","weixinid","avatar","status"}
        Dim nms1() As String = {"name","position","mobile","gender","email","weixinid","avatar","status"}
        For Each jt As JToken In jo("userlist")
            Dim dr As DataRow = DataTables("Users").Find("userid = '" & jt("userid").Tostring & "'")
            If dr IsNot Nothing Then
                For Each nm As String In nms1
                    dr(nm) = jt(nm)
                Next
            Else           '遍历一旦进入else,新增行结束后,代码就不执行了,好像不在进入next,
                Dim dr0 As DataRow = DataTables("Users").AddNew()
                For Each nm As String In nms
msgbox(nm)
msgbox(jt(nm))
                    dr0(nm) = jt(nm)
msgbox(123)
                Next
            End If
        Next
        DataTables("Users").Save()
    Else
        MessageBox.Show(jo.ToString)
    End If

 回到顶部