以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  删除行的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92851)

--  作者:cxj1988mmx
--  发布时间:2016/11/15 10:24:00
--  删除行的问题
如果表使用复制粘贴操作,我用以下代码实现数据同步
If e.Table.Current IsNot Nothing Then

For Each r As DataRow In e.Table.DataTable.DataRows
If r IsNot Nothing
If r.RowState <> DataRowState.Unchanged Then
    Dim p As String = IIF(r.RowState = DataRowState.Added, "A#", "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
Next


End If


以上代码在CurrentChanged事件中,如果删除行已经修改过的行就会报错,有什么办法判断已经删除但未保存的行

--  作者:有点蓝
--  发布时间:2016/11/15 10:44:00
--  
试试

If e.Table.Current IsNot Nothing Then
    
    For Each r As Row In e.Table.Rows
        If r.DataRow.RowState <> DataRowState.Unchanged Then
            Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "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
    Next
    
End If

--  作者:cxj1988mmx
--  发布时间:2016/11/15 16:24:00
--  
以上代码在删除行时还会报错
--  作者:cxj1988mmx
--  发布时间:2016/11/15 16:40:00
--  
.NET Framework 版本:2.0.50727.8689
Foxtable 版本:2016.7.29.1
错误所在事件:出库单,CurrentChanged
详细错误信息:
不能通过已删除的行访问该行的信息。



--  作者:有点蓝
--  发布时间:2016/11/15 17:00:00
--  
出库单,CurrentChanged,完整代码贴出来
--  作者:有点青
--  发布时间:2016/11/15 17:47:00
--  

为什么要在currentChanged事件写所有行的同步代码?每次都要触发?

 

如果单独做一个同步按钮不是更好。


--  作者:cxj1988mmx
--  发布时间:2016/11/15 17:58:00
--  
已解决

用以下代码


If e.Table.Current IsNot Nothing Then
            
            
            
            If e.Table.Rows.Count > = 2 Or ( e.Table.Rows.Count  = 1 And  e.Table.Current.DataRow.RowState <> DataRowState.Added )
                \'MessageBox.show(e.Table.Rows.Count)
                Dim i = 0
                Dim r As Row
                For i= 0 To e.Table.Rows.Count -1
                    If e.Table.Rows(i).DataRow.RowState <> DataRowState.Deleted
                        \'For Each r As Row In e.Table.Rows
                        \'If r IsNot Nothing And r.DataRow.RowState <> DataRowState.Deleted
                        r = e.Table.Rows(i)
                        If r.DataRow.RowState <> DataRowState.Unchanged Then
                            Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "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
                Next
            End If
        End If