以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  主表锁定后,关联表还可以添加数据  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=171450)

--  作者:夜点蚊香
--  发布时间:2021/8/30 17:16:00
--  主表锁定后,关联表还可以添加数据
关联表的DataRowAdding代码如下

Dim dr As DataRow = DataTables("学生排课档案").Datarows(0)
Dim pr As DataRow = dr.GetParentrow("课程档案DAY")
If pr.Locked = True Then
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("数据已锁定,不能添加新行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
e.DataRow("创建时间") = Date.Now()
e.DataRow("创建人") = _UserName
e.DataRow("序号") = e.DataTable.Compute("Max(序号)") + 1
e.DataRow("id") = e.DataRow("序号")

--  作者:有点蓝
--  发布时间:2021/8/30 17:36:00
--  
下面代码是搞笑的么,永远只判断第一行数据?或者说"学生排课档案"永远只有一行数据?

Dim dr As DataRow = DataTables("学生排课档案").Datarows(0)

--  作者:夜点蚊香
--  发布时间:2021/8/30 17:54:00
--  
我也发现这个问题了。判断当前行。
--  作者:夜点蚊香
--  发布时间:2021/8/30 18:11:00
--  帮忙看一下代码,更改了判断当前行。还是有点问题。
Dim dr As DataRow = Tables("学生排课档案").current.DataRow
Dim pr As DataRow = dr.GetParentrow("课程档案DAY")

If pr.Locked = True Then \'判断主表状态
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("已经锁定,不能进行操作了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Messagebox.Show(pr("课程档案编号"))
End If

--  作者:有点蓝
--  发布时间:2021/8/30 20:09:00
--  
代码在哪个表的事件?和"学生排课档案"有什么关系?
--  作者:夜点蚊香
--  发布时间:2021/8/31 9:09:00
--  
主表是  课程档案DAY 关联表是 学生排课档案

代码在 学生排课档案 的BeforeAddDataRow里
[此贴子已经被作者于2021/8/31 9:10:36编辑过]

--  作者:有点蓝
--  发布时间:2021/8/31 9:18:00
--  
Dim dr As DataRow = Tables("课程档案DAY").current.DataRow
If dr.Locked = True Then \'判断主表状态
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("已经锁定,不能进行操作了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If

--  作者:夜点蚊香
--  发布时间:2021/8/31 9:34:00
--  代码可以了,没看懂代码
Dim dr As DataRow = Tables("课程档案DAY").current.DataRow
If dr.Locked = True Then \'判断主表状态
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("已经锁定,不能进行操作了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If

为什么 Dim dr As DataRow = Tables("课程档案DAY").current.DataRow 这行代码是判断当前新建行的主表行

逻辑不是应该 先判断当前关联行的行号 然后判断 关联行的主表行。然后再判断主表行的状态,在根据主表行的状态进行操作吗。


--  作者:有点蓝
--  发布时间:2021/8/31 9:45:00
--  
2个问题,
1、麻烦先看看帮助:http://www.foxtable.com/webhelp/topics/0629.htmBeforeAddDataRow的说明【增加一行之前执行。】,也就是这个新行还没有生出来,不存在
2、在关联表新增的时候,父表肯定是已经选中对应的行了,为什么不直接取,还要绕几个弯,是嫌电脑性能太好了吗

--  作者:夜点蚊香
--  发布时间:2021/8/31 9:55:00
--  
谢谢,明白了