以文本方式查看主题 - 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位。 另外,我现在的项目是“外部数据源”在局域网内使用的,我怎么“发项目”到论坛附件来? 直接发项目备份文件上来吗?没有数据源老师能看到“项目内容”吗?
[此贴子已经被作者于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是用来显示临时数据库数据的界面,类似商场的陈列柜。
|