帮助中关于DataList的Current的说明及事例是:
DataRow类型,返回DataList所选定的行。
示例
……
为此,可将该按钮的Click事件代码设为:
Dim dst As WinForm.DataList = e.Form.Controls("DataList1")
Dim dr as DataRow = dst.Current '获得选定行
If dr Is Nothing Then
Return
End If
Dim Index As Integer = Tables("订单").FindRow(dr) '获得选定行在Tables("订单")中的位置
If Index >=0 Then '如果选定行在Tables("订单")中存在
Tables("订单").Position = Index '定位到选定行
Forms("窗口1").Open() '打开编辑窗口
End If
……
我有两个问题,是:
(1)上面的事例好像有点小问题,我就是照做的,结果总是出错,害得我查了半天。原因是获得DataList的当前行后直接用Dim Index As Integer = Tables("订单").FindRow(dr) 定位在Table中的位置,没有考虑这时候DataList中的当前行dr在Table中可能并不存在,即Table可能是经过筛选的,所以这时候会出现DataList中显示的当前行在Table中找不到,无法打开窗口,所以就出错。如果在用Table定位当前行之前加上一句:Tables("订单").Filter=True,应该就没有什么问题了。不知我的分析对不对?如果对建议修改帮助文件,作为帮助文件中的事例会经常被大家抄过来用,如果不修改会给大家造成误导。
(2)在上例中,假如窗口1不绑定订单表,而是绑定全局变量,是否就没有必要再用table的Findrow及position定位,可以直接用 vars("变量名")=dr("字段名"),窗口保存的时候,反过来:dr("字段名")=vars("变量名")。这种方法有什么问题吗?
[此贴子已经被作者于2009-5-7 15:25:23编辑过]