以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [分享]我好像发现了DataRowState.Deleted的使用场景  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=90216)

--  作者:chen3728060
--  发布时间:2016/9/7 20:22:00
--  [分享]我好像发现了DataRowState.Deleted的使用场景

我想做一件这样的事情,在我的商品列表,点击每行商品,对应自动用sqlGroupTableBuilder的方法,在窗口里一个 SQLQuery表里加载对应的库存流水。说白了就是方便我看库存 

 

于是我在CurrentChanged事件里写:

 

If Forms("商品列表").opened Then
   
    If e.Table.rows.count = 1 AndAlso e.Table.Current IsNot Nothing AndAlso e.Table.Current.DataRow.RowState = 4 Then \'用这个来避免删除最后一行时引发的Load报错,大红袍老师说的
       
        Return
    Else
        If e.Table.Current IsNot Nothing  Then
            Dim r As Row = e.Table.Current
           
            Dim g As New SQLGroupTableBuilder("LSStore", "LSStoreFlow")
            ...      一大堆SQLGroupTableBuilder代码,其中有个代码是g.filter =,要用到  r("商品ID")
            ...
        End If
    End If
End If

 

当我的商品列表里只剩下普通状态的商品(也就是行编号是蓝色的。补充知识:已修改未保存为橙色,刚新建未保存为红色)

我删除排第1个的那个商品时,都会报错,不能从已经删除的行里面引用数据。(删除非第一行的商品则不会有问题)


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

 

 

于是我把代码改为

If Forms("商品列表").opened Then
   
    If e.Table.rows.count = 1 AndAlso e.Table.Current IsNot Nothing AndAlso e.Table.Current.DataRow.RowState = 4 Then \'用这个来避免删除最后一行时引发的Load报错,大红袍老师说的
       
        Return
    Else
        If e.Table.Current IsNot Nothing  Then
            Dim r As Row = e.Table.Current

                 If r.DataRow.RowState <> DataRowState.Deleted Then

            
                       Dim g As New SQLGroupTableBuilder("LSStore", "LSStoreFlow")
                       ...      一大堆SQLGroupTableBuilder代码,其中有个代码是g.filter =,要用到  r("商品ID")
                       ...

                 End If
        End If
    End If
End If

 

然后就没问题了!我记得之前一直有人问  DataRowState.Deleted怎么用,我估计就是我这场景下可以用。

还有我想问下,除了用这个DataRowState.Deleted避免报错,有更高明的设计方法吗?实现我想要的点击商品自动加载对应库存帐


--  作者:有点蓝
--  发布时间:2016/9/7 21:05:00
--  
那要看你的事件之间的触发逻辑是怎样的了。

在使用的时候先判断一下是正确的做法