以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  代码冲突,求帮助  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157645)

--  作者:夜点蚊香
--  发布时间:2020/10/23 23:14:00
--  代码冲突,求帮助
在(学生排课档案) 的 BeforeAddDataRow 事件中有以下代码 判断主表是否锁定,如果锁定,不能在字表添加新的行

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

现在 学生档案里的内容是通过另一个排课表 在 BeforeSaveDataRow 事件中有以下代码

Dim r As DataRow = e.DataRow \'当前选中的行
If r Is Nothing Then Return \'如果表格没有数据
Dim d As Date = r("开始日期")
Dim d2 As Date = d.AddDays(r("总天数"))
Dim i As Integer = 1
Dim nr As Row
Do While d <= d2
    If d.DayOfWeek = r("星期数字") Then
        nr = Tables("学生排课档案").addnew()
        nr("日期") = d
        nr("星期") = r("星期")
        nr("科目") = r("科目")
        nr("学号") = r("学号")
        nr("姓名") = r("姓名")
        \'nr("性别") = r("性别")
        nr("排课编号") = r("排课编号")
        nr("课时段") = r("课时段")
        nr("课程档案编号") = D + r("校区")+ r("分类")+ r("科目")+ r("课程")+ r("课时段")
        nr("校区") = r("校区")
        nr("分类") = r("分类")
        nr("课程") = r("课程")
        nr("时段") = r("时段")
        nr("上课时间") = r("上课时间")
        nr("下课时间") = r("下课时间")
        
        i = 7
    End If
    d = d.AddDays(i)
Loop

现在问题 在排课的时候,同时会执行 学生排课档案的 BeforeAddDataRow 事件中的代码 (最上面的代码)

这样新生成排课档案的时候,就会报错.错误代码如下

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:学生排课档案,BeforeAddDataRow
详细错误信息:
索引超出了数组界限。

请问什么方法可以排除程序新增,还是手动新增


--  作者:有点蓝
--  发布时间:2020/10/24 8:54:00
--  
BeforeAddDataRow
if vars("add") = false
Dim dr As Row = Tables("课程档案DAY").current
If dr isnot nothing Then \'判断主表状态
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("已经下课了,不能进行操作了,如需造作需要经理授权!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
end if

BeforeSaveDataRow 
Dim r As DataRow = e.DataRow \'当前选中的行
If r Is Nothing Then Return \'如果表格没有数据
Dim d As Date = r("开始日期")
Dim d2 As Date = d.AddDays(r("总天数"))
Dim i As Integer = 1
Dim nr As Row
vars("add") = true
Do While d <= d2
    If d.DayOfWeek = r("星期数字") Then
        nr = Tables("学生排课档案").addnew()
        nr("日期") = d
        nr("星期") = r("星期")
        nr("科目") = r("科目")
        nr("学号") = r("学号")
        nr("姓名") = r("姓名")
        \'nr("性别") = r("性别")
        nr("排课编号") = r("排课编号")
        nr("课时段") = r("课时段")
        nr("课程档案编号") = D + r("校区")+ r("分类")+ r("科目")+ r("课程")+ r("课时段")
        nr("校区") = r("校区")
        nr("分类") = r("分类")
        nr("课程") = r("课程")
        nr("时段") = r("时段")
        nr("上课时间") = r("上课时间")
        nr("下课时间") = r("下课时间")
        
        i = 7
    End If
    d = d.AddDays(i)
Loop
vars("add") = false

--  作者:夜点蚊香
--  发布时间:2020/10/24 13:08:00
--  还是同样的错,您看我理解的对吗
课程档案表的 BeforeAddDataRow
if vars("add") = false 
Dim dr As Row = Tables("课程档案DAY").current
If dr isnot nothing Then \'判断主表状态
    e.Cancel = True \'那么取消输入并提示用户
    Messagebox.Show("已经下课了,不能进行操作了,如需造作需要经理授权!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
end if

排课表的 BeforeSaveDataRow 
Dim r As DataRow = e.DataRow \'当前选中的行
If r Is Nothing Then Return \'如果表格没有数据
Dim d As Date = r("开始日期")
Dim d2 As Date = d.AddDays(r("总天数"))
Dim i As Integer = 1
Dim nr As Row
vars("add") = true
Do While d <= d2
    If d.DayOfWeek = r("星期数字") Then
        nr = Tables("学生排课档案").addnew()
        nr("日期") = d
        nr("星期") = r("星期")
        nr("科目") = r("科目")
        nr("学号") = r("学号")
        nr("姓名") = r("姓名")
        \'nr("性别") = r("性别")
        nr("排课编号") = r("排课编号")
        nr("课时段") = r("课时段")
        nr("课程档案编号") = D + r("校区")+ r("分类")+ r("科目")+ r("课程")+ r("课时段")
        nr("校区") = r("校区")
        nr("分类") = r("分类")
        nr("课程") = r("课程")
        nr("时段") = r("时段")
        nr("上课时间") = r("上课时间")
        nr("下课时间") = r("下课时间")
        
        i = 7
    End If
    d = d.AddDays(i)
Loop
vars("add") = false

第一段代码 vars("add") = false 判断 第二段代码 的局部变量 add 是否为 false

第二段代码 在执行的时候吧第 局部变量 add 赋值 false

这样第一段代码执行的时候先判断 第二段代码的add 是否为false 如果是的话,不执行下面的代码
如果不是false 执行下面的代码

--  作者:有点蓝
--  发布时间:2020/10/24 14:22:00
--  
删除项目里的bin目录,重启项目测试
--  作者:夜点蚊香
--  发布时间:2020/10/24 21:12:00
--  找到原因了,主表有数据行,就不会报错
找到原因了,主表有数据行,就不会报错。如何判断主表是否有数据。如果是空表则不执行代码
--  作者:linyunu
--  发布时间:2020/10/24 23:11:00
--  
If DataTables("表A").DataRows.Count > 0 Then
--  作者:有点蓝
--  发布时间:2020/10/25 20:16:00
--  
以下是引用夜点蚊香在2020/10/24 21:12:00的发言:
找到原因了,主表有数据行,就不会报错。如何判断主表是否有数据。如果是空表则不执行代码

不应该呀,我给的代码是有判断的

If dr isnot nothing Then