Foxtable(狐表)用户栏目专家坐堂 → 代码冲突,求帮助


  共有2105人关注过本帖树形打印复制链接

主题:代码冲突,求帮助

帅哥哟,离线,有人找我吗?
夜点蚊香
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4589 威望:0 精华:0 注册:2020/4/15 19:53:00
代码冲突,求帮助  发帖心情 Post By: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
详细错误信息:
索引超出了数组界限。

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


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107157 积分:545034 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
夜点蚊香
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4589 威望:0 精华:0 注册:2020/4/15 19:53:00
还是同样的错,您看我理解的对吗  发帖心情 Post By: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 执行下面的代码

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107157 积分:545034 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/24 14:22:00 [只看该作者]

删除项目里的bin目录,重启项目测试

 回到顶部
帅哥哟,离线,有人找我吗?
夜点蚊香
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4589 威望:0 精华:0 注册:2020/4/15 19:53:00
找到原因了,主表有数据行,就不会报错  发帖心情 Post By:2020/10/24 21:12:00 [只看该作者]

找到原因了,主表有数据行,就不会报错。如何判断主表是否有数据。如果是空表则不执行代码

 回到顶部
帅哥哟,离线,有人找我吗?
linyunu
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:249 积分:1853 威望:0 精华:2 注册:2018/1/16 20:53:00
  发帖心情 Post By:2020/10/24 23:11:00 [只看该作者]

If DataTables("表A").DataRows.Count > 0 Then

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107157 积分:545034 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/25 20:16:00 [只看该作者]

以下是引用夜点蚊香在2020/10/24 21:12:00的发言:
找到原因了,主表有数据行,就不会报错。如何判断主表是否有数据。如果是空表则不执行代码

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

If dr isnot nothing Then 

 回到顶部