Foxtable(狐表)用户栏目专家坐堂 → 关于DataList的current


  共有20278人关注过本帖树形打印复制链接

主题:关于DataList的current

帅哥哟,离线,有人找我吗?
cpayinyuan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
关于DataList的current  发帖心情 Post By:2009/5/7 13:14:00 [只看该作者]

帮助中关于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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/7 14:56:00 [只看该作者]

1、不应该出错啊,因为代码中加了判断的:
If Index >=0 Then '如果选定行在Tables("订单")中存在

2、当然可以的。

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/5/7 15:24:00 [只看该作者]

以下是引用狐狸爸爸在2009-5-7 14:56:00的发言:
1、不应该出错啊,因为代码中加了判断的:
If Index >=0 Then '如果选定行在Tables("订单")中存在

     我知道您的意思,虽然有这个判断,不会引用空行,但用户希望的是只要表中存在这一行就打开窗口,即使有这个判断,仍然不会打开窗口,这不是用户希望的结果!应该可以算作出错.

[此贴子已经被作者于2009-5-7 15:24:35编辑过]

 回到顶部