以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 代码冲突,求帮助 (http://foxtable.net/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
|