以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]窗口绑定内容和实际表选择内容不同步  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103717)

--  作者:whyxd
--  发布时间:2017/7/15 10:04:00
--  [求助]窗口绑定内容和实际表选择内容不同步
窗口1
绑定表:表A,窗口类型:停靠
按钮1 
代码:
With Tables("表A")
    If .Position < .Rows.count - 1  Then
        .Position = .position + 1
    Else
        msgbox("已经到达最后一张单据!")
    End If
End With

textbox1:
类型:texbox,绑定到:表A.number
表A
表事件 BeforeSelChange :

If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行
        Dim r1 As Row = e.Table.Rows(e.NewRange.RowSel)\'定义新选择的行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) \'获得原来选择的行
        If r.IsNull("number")  Then  \'如果编号为空
            e.Cancel = True
        End If
    End If
End If

现象:单击"按钮1",如果原来选择行是"number"列是空值,那么"表A"选择行不发生变化,但是"textbox1"的内容却变成了下一行的内容。

--  作者:有点蓝
--  发布时间:2017/7/15 10:34:00
--  
With Tables("表A")
    If .Position < .Rows.count - 1  Then
        If Tables("表A").current.IsNull("number") = False
            .Position = .position + 1
        End If
    Else
        msgbox("已经到达最后一张单据!")
    End If
End With

--  作者:whyxd
--  发布时间:2017/7/15 13:14:00
--  回复:(有点蓝)With Tables("表A")    If...
可以在表事件上调整么?》
因为我类似窗口有很多,而且每个窗口好几个按钮,上一行、下一行、首行、最后一行。。。如果在每个按钮上空值的话,不太好管理。

--  作者:有点蓝
--  发布时间:2017/7/15 14:35:00
--  
这个可能是个bug,这样处理一下

If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行
        Dim r1 As Row = e.Table.Rows(e.NewRange.RowSel)\'定义新选择的行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) \'获得原来选择的行
        If r.IsNull("number")  Then  \'如果编号为空
            e.Cancel = True
e.Table.Position = e.OldRange.RowSel 
        End If
    End If
End If

--  作者:whyxd
--  发布时间:2017/7/16 8:55:00
--  回复:(有点蓝)这个可能是个bug,这样处理一下If e....
这样也可以,测试过了,没有问题。多谢耐心指导图片点击可在新窗口打开查看