Foxtable(狐表)用户栏目专家坐堂 → 关于验证某行数据的有效性尚有二个问题待完善)


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

主题:关于验证某行数据的有效性尚有二个问题待完善)

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


加好友 发短信
等级:婴狐 帖子:7 积分:297 威望:0 精华:0 注册:2008/11/29 13:25:00
关于验证某行数据的有效性尚有二个问题待完善)  发帖心情 Post By:2009/4/16 19:39:00 [只看该作者]

例如:当前选定行是第5行,如果这时你选定第X行或添加行,也就是说即将离开第5行,开始检验第五行中的第1列、第3列、第5列是否为空。如果为空,不能添加行不能选择其他行,如果不能空可以添加行也可以选择其他行。
在多位管理员及版主的帮助下,已经基本解决问题,现将代码粘贴如下:
BeforeAddDataRow事件:

If CurrentTable.Rows.Count <= 0 Then
    Return
End If
Dim r As Row = CurrentTable.Current
If r.isNull("第一列") Orelse r.IsNull("第三列") OrElse  r.IsNull("第五列") Then
    e.Cancel = True
End If
BeforeSelChange事件:
If CurrentTable.Rows.Count <= 1 Then
    Return
End If
Dim r As Row = CurrentTable.Current
If r.isNull("第一列") Orelse r.IsNull("第三列") OrElse  r.IsNull("第五列") Then
    If e.NewRange.RowSel <> e.OldRange.RowSel Then
        e.Cancel = True
    End If
End If

但还是有两个方面尚待完善,第一、添加行后不能直接选定新行,必须先选定原来行中的其他单元格后才允许选定新添加的行,这一点我把帮助中的例子试了一下,也存在这个问题,不知是什么原因。第二,删除最后的一行依然会出现错误代码。

[此贴子已经被作者于2009-4-17 12:34:01编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/4/16 20:29:00 [只看该作者]

这样?:

if 
第1列、第3列、第5列为空 then
    e.Cancel = True
end if
[此贴子已经被作者于2009-4-16 20:28:57编辑过]

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


加好友 发短信
等级:婴狐 帖子:7 积分:297 威望:0 精华:0 注册:2008/11/29 13:25:00
  发帖心情 Post By:2009/4/16 20:36:00 [只看该作者]

请问楼上的朋友,代码应放在哪个事件的位置?我感觉此代码检测的并不是第5行的第1列第3列第5列,而是选择的其他行,似乎有些不妥,希望能够详细介绍一下

[此贴子已经被作者于2009-4-16 20:41:39编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/4/16 20:47:00 [只看该作者]

if  currenttable.position = 4 andalso e.DataRow.isnull("第1列")  then
    e.Cancel = True
end if

放在positionchanged事件中吧

[此贴子已经被作者于2009-4-16 20:52:19编辑过]

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


加好友 发短信
等级:婴狐 帖子:7 积分:297 威望:0 精华:0 注册:2008/11/29 13:25:00
  发帖心情 Post By:2009/4/16 20:59:00 [只看该作者]

我原来也是这么想的,但currenttable.position = 4是固定的,这个4动态计算该怎样做呢? 联系我的QQ23426806
[此贴子已经被作者于2009-4-16 21:07:42编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/4/16 21:06:00 [只看该作者]

if  currenttable.current.isnull("第1列")  then  '=当前行 
    If e.NewRange.RowSel <> e.OldRange.RowSel Then 
        e.Cancel =
False 
    End if
end if

试一试吧,我也在学习啊~

[此贴子已经被作者于2009-4-16 21:09:20编辑过]

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


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

这是例子,注意我在两个事件中设置了代码,分别是BeforeAddDataRow和BeforeSelChange:
 

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


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


加好友 发短信
等级:婴狐 帖子:7 积分:297 威望:0 精华:0 注册:2008/11/29 13:25:00
  发帖心情 Post By:2009/4/16 22:28:00 [只看该作者]

非常感谢!基本解决了问题,只是在删除例子中的第二行时出现错误代码提示,不知是何原因?

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/4/16 23:07:00 [只看该作者]

是否要改成这样呢?
BeforeAddDataRow事件:

If CurrentTable.Rows.Count <= 0 Then
    Return
End If
Dim r As Row = CurrentTable.Current
If r.isNull("第一列") Orelse r.IsNull("第三列") OrElse  r.IsNull("第五列") Then
    e.Cancel = True
End If
BeforeSelChange事件:
If CurrentTable.Rows.Count <= 1 Then
    Return
End If
Dim r As Row = CurrentTable.Current
If r.isNull("第一列") Orelse r.IsNull("第三列") OrElse  r.IsNull("第五列") Then
    If e.NewRange.RowSel <> e.OldRange.RowSel Then
        e.Cancel = True
    End If
End If


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


加好友 发短信
等级:婴狐 帖子:7 积分:297 威望:0 精华:0 注册:2008/11/29 13:25:00
  发帖心情 Post By:2009/4/17 8:38:00 [只看该作者]

谢谢
第一、添加行后不能直接选定新行,必须先选定原来行中的其他单元格后才允许选定新添加的行,这一点我把帮助中的例子试了一下,也存在这个问题,不知是什么原因。第二,删除最后的一行依然会出现错误代码。
[此贴子已经被作者于2009-4-17 12:37:04编辑过]

 回到顶部
总数 12 1 2 下一页