以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多选时StartEdit只对选择区的第一行生效怎么办?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100974)

--  作者:ajie5211
--  发布时间:2017/5/22 17:34:00
--  [求助]多选时StartEdit只对选择区的第一行生效怎么办?
如题,在openQQ独占编程使用时,发现在一次选择多行,用delete删除时,StartEdit中的代码只对选择区的第一行生效,怎么整?
图片点击可在新窗口打开查看此主题相关图片如下:68b8deef-8811-4b4f-868c-231f04192e15.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2017/5/22 17:40:00
--  
StartEdit中的代码贴出来看看
--  作者:ajie5211
--  发布时间:2017/5/22 17:42:00
--  
If e.Col.Name <> "品名规格" AndAlso e.Col.Name <> "销售单号" Then
    Dim r As Row = e.Table.Current
    If r.DataRow.RowState = DataRowState.Added Then \'新增行正常编辑
        Return
    End If
    If QQClient.Ready = False Then \'如果QQClient没有启动,则禁止编辑
        PopMessage("必须启动QQClient,才能编辑此表数据!","提示",PopIconEnum.Infomation,5)
        e.Cancel = True
        Return
    End If
    Dim key As String = e.Table.DataTable.Name  & ":" & r("销售单号") & ":" & e.Col.Name
    If tbrk.Contains(key) Then \'如果本人之前已经编辑此行,则正常编辑
        Return
    Else \'如果本人之前没有编辑此行
        Dim msg = QQClient.SendWait("?#" & Key & "#?",5) \'向服务器发送请求编辑信息
        If msg = "OK" Then \'如果服务器返回OK
            tbrk.Add(key) \'在本地登记正在编辑此行
        ElseIf msg > "" Then \'否则显示服务器返回的信息,并取消编辑
            PopMessage("无法编辑此单元格,因为:" & vbcrlf & msg ,"提示",PopIconEnum.Infomation,5)
            e.Cancel = True
        Else \'如果服务器没有返回信息,则取消编辑
            PopMessage("因服务器无响应,无法编辑此行!" ,"提示",PopIconEnum.Infomation,5)
            e.Cancel = True
        End If
    End If
End If

--  作者:有点蓝
--  发布时间:2017/5/22 22:09:00
--  
KeyDown事件,以帮助的例子做的,自己相应改改

If e.KeyCode = Keys.Delete Then
    e.Cancel = True
    If QQClient.Ready = False Then \'如果QQClient没有启动,则禁止编辑
        PopMessage("必须启动QQClient,才能编辑此表数据!","提示",PopIconEnum.Infomation,5)
        Return
    End If
    If e.Table.TopRow = e.Table.BottomRow Then Return
    For i As Integer = e.Table.TopRow To e.Table.BottomRow
        Dim r As Row = e.Table.Rows(i)
        If r.DataRow.RowState <> DataRowState.Added Then \'新增行正常编辑
            Dim key As String = e.Table.DataTable.Name  & ":" & r("_Identify")
            If tbrk.Contains(key) = False Then \'如果 本人之前已经编辑此行,则正常编辑
                Dim msg = QQClient.SendWait("?#" & Key & "#?",5) \'向服务器发送请求编辑信息
                If msg = "OK" Then \'如果服务器返回OK
                    tbrk.Add(key) \'在本地登记正在编辑此行
                ElseIf msg > "" Then \'否则显示服务器返回的信息,并取消编辑
                    \'PopMessage("无法编辑此行,因为:" & vbcrlf & msg ,"提示",PopIconEnum.Infomation,5)
                    Continue For
                Else \'如果服务器没有返回信息,则取消编辑
                    \'PopMessage("因服务器无响应,无法编辑此行!" ,"提示",PopIconEnum.Infomation,5)
                    Continue For
                End If
            End If
        End If
        For j As Integer = e.Table.LeftCol To e.Table.RightCol
            r(j) = Nothing
        Next
    Next
End If

--  作者:ajie5211
--  发布时间:2017/5/23 8:00:00
--  

一定要这样吗?程序能不能更新一下,让StartEdit支持所有的变动行哪?


--  作者:ajie5211
--  发布时间:2017/5/23 8:02:00
--  
这样整,不仅是delete,还有Ctrl+D也有这些问题。去写KeyDown事件,还不如去写

DataColChanging

事件。
--  作者:有点色
--  发布时间:2017/5/23 9:02:00
--  

2楼的代码,这句 Dim r As Row = e.Table.Current

 

要改成 Dim r As Row = e.Row


--  作者:ajie5211
--  发布时间:2017/5/23 9:19:00
--  
以下是引用有点色在2017/5/23 9:02:00的发言:

2楼的代码,这句 Dim r As Row = e.Table.Current

 

要改成 Dim r As Row = e.Row

OK了,谢谢!