以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于验证某行数据的有效性尚有二个问题待完善)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2477)

--  作者:taoliju
--  发布时间: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
--  发布时间:2009/4/16 20:29:00
--  
这样?:

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

--  作者:taoliju
--  发布时间:2009/4/16 20:36:00
--  

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

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

--  作者:mr725
--  发布时间: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
--  发布时间:2009/4/16 20:59:00
--  
我原来也是这么想的,但currenttable.position = 4是固定的,这个4动态计算该怎样做呢? 联系我的QQ23426806
[此贴子已经被作者于2009-4-16 21:07:42编辑过]

--  作者:mr725
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/4/16 22:01:00
--  

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

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


--  作者:taoliju
--  发布时间:2009/4/16 22:28:00
--  
非常感谢!基本解决了问题,只是在删除例子中的第二行时出现错误代码提示,不知是何原因?
--  作者:czy
--  发布时间: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
--  发布时间:2009/4/17 8:38:00
--  
谢谢
第一、添加行后不能直接选定新行,必须先选定原来行中的其他单元格后才允许选定新添加的行,这一点我把帮助中的例子试了一下,也存在这个问题,不知是什么原因。第二,删除最后的一行依然会出现错误代码。
[此贴子已经被作者于2009-4-17 12:37:04编辑过]