以文本方式查看主题

-  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") = ""


测试发现修改数据,删除数据,删除行的没有问题。
如果在表中处在有数据行的时候,新增行及数据是没有问题的。但是如果是表中没有数据的时候新增行是,程序就会闪退了。
请问是什么问题。
其他的设置都是按帮助文件做的。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码doc文件.rar


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