以文本方式查看主题 - 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
|