以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请教 遍历中止的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=134851)

--  作者:bahamute
--  发布时间: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

--  作者:有点甜
--  发布时间:2019/5/10 15:57:00
--  

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

 

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


--  作者:bahamute
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2019/5/10 16:22:00
--  

 

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

 

 


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

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

--  作者:有点甜
--  发布时间: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