Foxtable(狐表)用户栏目专家坐堂 → [求助]代码报错及移动行的代码求助


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

主题:[求助]代码报错及移动行的代码求助

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]代码报错及移动行的代码求助  发帖心情 Post By:2021/9/18 9:42:00 [只看该作者]

先说报错:
全局代码:PrepareEdit
If e.Table.Cols.Contains("审核") AndAlso e.Table.IsRelation =False Then
    If e.Row("审核") = True AndAlso e.Col.Name <> "审核"  Then '本条记录审核后禁止编辑除审核外的所有列
        e.Cancel = True
    ElseIf e.Row("审核") = False Then '未审核的记录在编辑前检查是否在后台已经被审核
        Dim cmd As New SQLCommand
        cmd.C
        cmd.C ommandText = "S elect [审核] F rom {" & e.Table.Name & "} Where [_Identify] = " & e.Row("_Identify") '从后台读取记录的审核列值
        Dim sh As  Boolean = cmd.ExecuteScalar() '后台读取的审核列值赋值给sh变量
        If sh = True  Then
            Dim 行号 As Integer = e.Row("_Identify") '将即将被移除的行的_Identify值赋值给变量行号
            e.Table.DataTable.RemoveFor("[_Identify] = " & e.Row("_Identify")) '移除本行
            e.Table.DataTable.AppendLoad("[_Identify] = " & 行号) '重新加载之前移除的行
            MessageBox.Show("本条记录已经在后台被审核,现已重新加载!" , "提示" , MessageBoxButtons.OK ,MessageBoxIcon.Information)
        End If
    End If
End If
以下是窗口表设置:

图片点击可在新窗口打开查看此主题相关图片如下:窗口表设置.jpg
图片点击可在新窗口打开查看
在这个窗口表上随便哪一行点下,就会报错:

图片点击可在新窗口打开查看此主题相关图片如下:报错图.jpg
图片点击可在新窗口打开查看

想不明白这是何解,请老师帮忙看看
另外,在这个窗口表上,我想按 CTRL + ↑ 及 CTRL + ↓ 来移动行,这样排工序方便点,不要在顺号列录序号来控制了,请老师帮忙写下示例代码,谢谢!




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


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

代码放到startedit事件

If e.Table.Cols.Contains("审核") AndAlso e.Table.IsRelation =False Then
    If e.Row("审核") = True AndAlso e.Col.Name <> "审核"  Then '本条记录审核后禁止编辑除审核外的所有列
        e.Cancel = True
    ElseIf e.Row("审核") = False Then '未审核的记录在编辑前检查是否在后台已经被审核
        Dim cmd As New SQLCommand
        cmd.C
        cmd.C ommandText = "S elect [审核] F rom {生产计划辅表} Where [_Identify] = " & e.Row("_Identify") '这里必须使用数据库的表名,不能使用窗口表名称
        Dim sh As  Boolean = cmd.ExecuteScalar() '后台读取的审核列值赋值给sh变量
        If sh = True  Then
            e.Row.load(false) 'http://www.foxtable.com/webhelp/topics/2895.htm
            MessageBox.Show("本条记录已经在后台被审核,现已重新加载!" , "提示" , MessageBoxButtons.OK ,MessageBoxIcon.Information)
        End If
    End If
End If

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/9/18 11:30:00 [只看该作者]

看来问题就出在窗口表名称上,这个代码的功能是要用于所有主表的,所以放在全局代码中了,如何判定某表是窗口中的表,从而对代码中的数据库名进行调整

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


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/18 11:34:00 [只看该作者]

判断名称中有下划线的就是窗口表。可以考虑把窗口表控件名称改为和表名一致,比如table1改为生产计划辅表,然后根据下划线拆分字符串即可

 回到顶部