以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [openqq]表中没有数据后新增行,程序退出 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=121516) |
||||
-- 作者:samlzc -- 发布时间:2018/7/8 11:01:00 -- [openqq]表中没有数据后新增行,程序退出 按帮助文件做了一个openQQ的客户端和服务端测试 在全局表事件的 beforeselchanged的事件中添加了 If e.Table.Current Is Nothing Then Else Dim r As Row = e.Table.Current Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#") r.Save() \'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg As String = p & e.Table.Name & "#" & r("_Identify") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next End If 全局表DataRowDeleting事件 Dim r As DataRow = e.DataRow Vars("dmsg") = "D#" & e.DataRow.DataTable.name & "#" & r("_Identify") 全局表DataRowDeleted事件 e.DataRow.DataTable.Save() For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name,Vars("dmsg") ) End If Next Vars("dmsg") = "" 测试发现修改数据,删除数据,删除行的没有问题。 如果在表中处在有数据行的时候,新增行及数据是没有问题的。但是如果是表中没有数据的时候新增行是,程序就会闪退了。 请问是什么问题。 其他的设置都是按帮助文件做的。
|
||||
-- 作者:有点甜 -- 发布时间:2018/7/9 9:35:00 -- 试试不要在 BeforeSelChange 事件写代码,把代码改写到click事件或者按钮里面。 |
||||
-- 作者:samlzc -- 发布时间:2018/7/9 9:47:00 -- If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行 If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行 Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) \'获得原来选择的行 Dim p As String If r.DataRow.RowState = DataRowState.Added Then p = "A#" r.Save() Dim msg As String = p & e.Table.DataTable.Name & "#" & r("_Identify") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next Else If r.DataRow.RowState = DataRowState.Modified Then p = "U#" r.Save()\'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg As String = p & e.Table.DataTable.Name & "#" & r("_Identify") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next End If End If End If 事件代码改为上述代码,已经不会自动退出程序了 但是如果当前行修改或新增后没有选择下一行,而是直接进行筛选,就触发不了事件了。请问如何解决
[此贴子已经被作者于2018/7/9 9:49:17编辑过]
|
||||
-- 作者:samlzc -- 发布时间:2018/7/9 9:56:00 -- click事件是已经点击了下一个需要修改的行,那如何引用原来的行来通知客户端已经增加或修改。好像没有相应的e参数 |
||||
-- 作者:有点甜 -- 发布时间:2018/7/9 13:59:00 -- 你修改了行等操作的时候,会触发datacolchanged事件的啊,为什么要在你那些地方写代码? |
||||
-- 作者:samlzc -- 发布时间:2018/7/9 23:35:00 -- 因为一行可能要修改一个或者几个单元格,如果放在datacolchanged,就重复触发事件几次。不会加重服务器负担吗 换行前判定,就是修改或输入完成后准备换下一行时触发事件同步。我觉得这样的逻辑通顺点
|
||||
-- 作者:有点甜 -- 发布时间:2018/7/10 9:21:00 -- 以下是引用samlzc在2018/7/9 9:47:00的发言:
事件代码改为上述代码,已经不会自动退出程序了
但是如果当前行修改或新增后没有选择下一行,而是直接进行筛选,就触发不了事件了。请问如何解决
[此贴子已经被作者于2018/7/9 9:49:17编辑过]
写一个总的方法,循环每一行数据,判断行状态,如果是新增/修改,就执行代码。把这个方法写到所有你需要同步数据的地方
http://www.foxtable.com/webhelp/scr/0428.htm
|