以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于“必填”的约束,搜索过论坛了,但还是要请教老师们  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146838)

--  作者:头狼
--  发布时间:2020/3/3 18:22:00
--  [求助]关于“必填”的约束,搜索过论坛了,但还是要请教老师们
表的某字段必填,在《使用指南》层面我确实没找到方法。
论坛搜索了下,也有分歧,是在保存时校验?还是在selchange 事件发生时校验...

请老师指点,我觉得有两点需要实现:
1,编辑某行,能不能“换行”事件发生时检验“必填”?  有“输入焦点换行” 事件吗?
2,不管在编辑时是否校验“必填”,保存表格时都应该校验,有类似的代码吗?请老师帮帮忙。
3,比如我想约束“往来单位表”的 税号 字段,必填且长度等于18位。

另外,我现在的项目是“外部数据源”在局域网内使用的,我怎么“发项目”到论坛附件来?
直接发项目备份文件上来吗?没有数据源老师能看到“项目内容”吗?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:businessdatamanagement_202003031125.zip


[此贴子已经被作者于2020/3/3 18:38:17编辑过]

--  作者:有点蓝
--  发布时间:2020/3/3 20:28:00
--  
参考:http://www.foxtable.com/webhelp/topics/0644.htm
--  作者:头狼
--  发布时间:2020/3/3 22:23:00
--  
非常谢谢老师!
请老师多看一眼,教教我理解一个问题:
If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) \'获得原来选择的行
        If r.IsNull("SerialNo") Or r("SerialNo").Length <> 18 Then  \'如果编号为空
            r.DataRow.SetError("SerialNo","必填项且长度为18位")
            MessageBox.Show("输入错误!","提示!")
        Else
            r.DataRow.SetError("SerialNo","")
        End If
    End If
End If

对这段代码,r("SerialNo").Length <> 18  这部分,写成 r.DataRow("SerialNo").Length <> 18  也是一样的。
而 r.DataRow.SetError("SerialNo","必填项且长度为18位") 这部分不能写成 r.SetError("SerialNo","必填项且长度为18位")

我请教老师的疑问:
1,为什么有的方法(如SetError)不继承给 Row 呢?
2,在《使用指南》的认知层面,使用一些“事件代码”的时候,如何选择使用 DataTable 和 Table ?(如上面代码中的 DataRow 和 Row ,如何选择?
3,在《使用指南》的认知层面,怎么理解 DataTable 是“不可见的表” ? Table 是“可见的表” ?
[此贴子已经被作者于2020/3/3 22:27:18编辑过]

--  作者:有点蓝
--  发布时间:2020/3/3 22:53:00
--  
1、没有为什么。就好像单车,汽车,马车都是车,有共性的东西,也有自己的特性,就如问为什么单车不像汽车一样有方向盘一样的道理。如果所有属性都一样也就没有必要分DataTable 和 Table了。
2、每个事件的参数都是固定的,用 DataTable 还是 Table,按照帮助说明使用即可
3、DataTable 可以理解为本地的临时数据库,类似商场的收货仓库,把物理数据库的数据加载到内存里临时使用。table是用来显示临时数据库数据的界面,类似商场的陈列柜。