Foxtable(狐表)用户栏目专家坐堂 → Datachanging事件与Dropdownbox事件冲突


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

主题:Datachanging事件与Dropdownbox事件冲突

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


加好友 发短信
等级:二尾狐 帖子:593 积分:5538 威望:0 精华:0 注册:2012/6/29 19:11:00
Datachanging事件与Dropdownbox事件冲突  发帖心情 Post By:2017/5/20 9:33:00 [只看该作者]

1、给窗口中Processschdule表Process通过设计了一个DropdownBox用于自定义录入;(如下图)

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

2、Dropdownbox的dropdownclose事件代码如下;


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

3、由于表的工艺名称、工艺分配、操作设备、操作要求四列只能使用DropdownBox的内容,不能被再次修改,所以在Prepareedit事件中增加以下代码;


图片点击可在新窗口打开查看此主题相关图片如下:3a.jpg
图片点击可在新窗口打开查看
4、为了录入方便,所以在Keydown增加以下代码;

If e.keycode = Keys.D AndAlso e.control = True Then
    For i As Integer = e.Table.topposition + 1 To e.Table.bottomposition
        e.Table.rows(i)(e.Table.ColSel) = e.Table.rows(i-1)(e.Table.ColSel)
    Next
    e.cancel = True
End If

 

现在的问题是,工艺名称、工艺分配、操作设备、操作要求这4列直接编辑是编辑不了了,但是如果我用Ctrl+D快捷键功能就又可以被修改;

为了堵上这个问题,我在datachanging事件中添加以下代码, “工艺分配、操作设备、操作要求”这些列用Ctrl+D快捷键是无效了,但是用DropdownBOX录入的“工艺名称”又被清空了(如图1);求指教这问题该怎么解决?

 

Case "ProcessTeam","ProcessMachine","ProcessName","ProcessDescription"
        If e.DataRow("ProcessCode") <> "" Then
            e.Cancel = True
        End If


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


加好友 发短信
等级:超级版主 帖子:107474 积分:546649 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/20 9:49:00 [只看该作者]

试试Keydown

If e.keycode = Keys.D AndAlso e.control = True Then
    If e.Table.topposition < e.Table.Rows.Count - 1 Then
        Dim value = e.Table.rows(e.Table.topposition)(e.Table.ColSel)
        For i As Integer = e.Table.topposition + 1 To e.Table.bottomposition
            Select Case e.Table.Cols(e.Table.ColSel).Name
                Case "ProcessTeam","ProcessMachine","ProcessName","ProcessDescription"
                    If e.DataRow("ProcessCode") <> "" Then
                        Continue For
                    End If
            End Select
            e.Table.rows(i)(e.Table.ColSel) = value
        Next
    End If
    e.cancel = True
End If

去掉datachanging事件代码

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


加好友 发短信
等级:二尾狐 帖子:593 积分:5538 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/5/21 15:38:00 [只看该作者]

谢谢“有点蓝”老师,我的问题用你的代码解决了;顺便说一声,你的代码里有两处错误,如下红色字体修正;
 
If e.keycode = Keys.D AndAlso e.control = True Then
    If e.Table.topposition < e.Table.Rows.Count - 1 Then
        Dim value  AS Integer = e.Table.rows(e.Table.topposition)(e.Table.ColSel)
        For i As Integer = e.Table.topposition + 1 To e.Table.bottomposition
            Select Case e.Table.Cols(e.Table.ColSel).Name
                Case "ProcessTeam","ProcessMachine","ProcessName","ProcessDescription"
                    If e.Table.rows(i)("ProcessCode") <> "" Then
                        Continue For
                    End If
            End Select
            e.Table.rows(i)(e.Table.ColSel) = value
        Next
    End If
    e.cancel = True
End If

 回到顶部