以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  新版对AddNew的处理方法似乎变了,明显不合理了  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3917)

--  作者:reachtone
--  发布时间:2009/8/18 21:50:00
--  新版对AddNew的处理方法似乎变了,明显不合理了
在老版中,用AddNew新增行、然后引发当前表的CurrentChanged事件。在CurrentChanged事件中,以下代码是可以正常通过的:

If e.Table.Current IsNot Nothing
    MessageBox.Show("当前Table共 " & e.Table.Rows.Count & "行! ")
    dim r as Integer = e.Table.Current.Index    \'当前行
    e.Table.Select(r,0)   \'选择当前行第一列
End If


但用了今天的新版以后,上面的代码就出错了。经认真分析发现,新版在执行了AddNew以后,Table的新增行已经产生,count也发生了变化,但这时该行并未加载进table,反而是先执行CurrentChanged事件,然后才加载行。

老版的执行顺序是:先新增行、然后加载该行、再执行CurrentChanged事件;
新版则是:先新增行、然后执行CurrentChanged事件、再加载该行。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar


按新版的这种处理方法,上述代码只能改成这样。这样的代码看起来实在别扭:
If e.Table.Rows.Count > 1
    dim r as Integer = e.Table.Current.Index    \'当前行
    e.Table.Select(r,0)   \'选择当前行第一列
End If


期望老六还能改回原来的那种处理方式!
[此贴子已经被作者于2009-8-18 21:54:34编辑过]

--  作者:czy
--  发布时间:2009/8/18 23:01:00
--  
奇怪,我没发现问题。
在两个版本中执行操作结果都是一样的。
--  作者:mr725
--  发布时间:2009/8/18 23:04:00
--  
这样不会有问题了:但也不会提示了~
If e.Table.position >= 0 then
If e.Table.Current IsNot Nothing
    MessageBox.Show("当前Table共 " & e.Table.Rows.Count & "行! ")
    dim r as Integer = e.Table.Current.Index    \'当前行 必须时可见的行
    e.Table.Select(r,0)   \'选择当前行第一列
End If
End If
[此贴子已经被作者于2009-8-18 23:15:56编辑过]

--  作者:reachtone
--  发布时间:2009/8/19 8:18:00
--  
加个position的判断确实是个好办法。
但我还是觉得,新版的这个变化有点没有道理。
--  作者:狐狸爸爸
--  发布时间:2009/8/19 8:30:00
--  
呵呵,我抽空看看,不过有些变化我也没有办法控制的.
--  作者:reachtone
--  发布时间:2009/8/19 10:53:00
--  
问题大了,连BeforeAddDataRow事件设置都有问题。看来这个AddNew还要老六认真对待一下,我现在关键的录入模块都出错了。
请老六看看这个例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:mr725
--  发布时间:2009/8/19 12:44:00
--  
6楼的问题存在~ 
--  作者:狐狸爸爸
--  发布时间:2009/8/19 13:02:00
--  
下次更新可以了