以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  复现多行?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92319)

--  作者:yancheng
--  发布时间:2016/10/31 20:31:00
--  复现多行?
1、复制两行,CTRL+C
2.粘贴两行及下面的子目,CTRL+V
3.在狐表的窗口里面,我用什么方法实现呢?
图片点击可在新窗口打开查看此主题相关图片如下:jdfw.gif
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2016/10/31 20:45:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=80523

具体上实例说明

--  作者:yancheng
--  发布时间:2016/11/1 7:46:00
--  
S=str.Replace(vblf,"").Trim(vbcr).Split(vbcr).Length 


S1=str.Split(vbcr).Length 

请问:S与S1是不是一样的?在什么情况下不一样呢?

全代码如下:

Dim t As Table = e.Table
If e.Control = True AndAlso t.Current IsNot Nothing Then
    Dim r As Integer = t.RowSel
    If e.KeyCode = keys.V Then
        Dim str As String = ClipBoard.GetText  
     
        Dim nr As Integer = str.Replace(vblf,"").Trim(vbcr).Split(vbcr).Length + (t.RowSel) - t.Rows.Count     
        If nr > 0 Then
            t.AddNew(nr)
            t.Select(r,t.ColSel)
        End If
    End If
End If

--  作者:有点蓝
--  发布时间:2016/11/1 9:05:00
--  
最后有换行的话就不一样了

Dim str As String = "123" & vbcrlf & "abc" & vbcrlf 
Output.Show(str.Replace(vblf,"").Trim(vbcr).Split(vbcr).Length )
Output.Show(str.Split(vbcr).Length)

--  作者:yancheng
--  发布时间:2016/11/1 17:41:00
--  
If e.Control = True AndAlso e.KeyCode = keys.c Then
    With Tables("清单指引")
        If .TopPosition > -1 Then
            Vars("e.table.topPosition")= .TopPosition
            Vars("e.table.BottomPosition")=.BottomPosition
        End If
    End With
End If


If e.Control = True AndAlso e.KeyCode = keys.v Then
e.cancel = True
    If Vars("e.table.topPosition") > -1 Then
        For i As Integer = Vars("e.table.BottomPosition")). To Vars("e.table.topPosition") Step -1
            If Tables("清单指引").Current IsNot Nothing Then
                Dim dr As Row = Tables("清单指引").InsertNew()
                \'Tables("清单指引").Position = Tables("清单指引").FindRow(dr.DataRow)
                dr("子目编码") =Tables("清单指引").Rows(i)("子目编码")
                dr("项目特征描述") =Tables("清单指引").Rows(i)("项目特征描述")
            End If
        Next
    End If
End If



我这样写了一下,不对,麻烦老师指导 一下。

e.table.BottomPosition  这个值,是变动的,当插入新的行后,它会变,我想是不是应该获取:datarow的行号值 。或者有其它的方法。
[此贴子已经被作者于2016/11/1 17:56:25编辑过]

--  作者:有点色
--  发布时间:2016/11/2 8:56:00
--  

复制的时候,先把数据存放下来呗。用一个变量记录

 

Dim drs As new List(of Row)
For i As Integer = Tables("清单指引").TopPosition To Tables("清单指引").BottomPosition
    drs.add(Tables("清单指引").Rows(i))
Next
vars("drs") = drs


--  作者:yancheng
--  发布时间:2016/11/2 15:13:00
--  
vars("drs") = drs  这个值 ,在我插入新行后,是不是还是一样会出现错误。跟我上面的代码这一样问题吧

--  作者:yancheng
--  发布时间:2016/11/2 15:29:00
--  

KeyDown中写入:


If e.Control = True AndAlso e.KeyCode = keys.c Then
    Dim drs As new List(of DataRow)
    For i As Integer = Tables("清单指引").TopPosition To Tables("清单指引").BottomPosition
        drs.add(Tables("清单指引").Rows(i).DataRow)
    Next
    vars("drs") = drs
End If


If e.Control = True AndAlso e.KeyCode = keys.v Then
    e.cancel = True
    If vars("drs") <> "" Then
       For Each dr As DataRow In vars("drs")    这里出错。  无法将类型为“System.Char”的对象强制转换为类型“Foxtable.DataRow”
            If Tables("清单指引").Current IsNot Nothing Then
                Dim r As Row = Tables("清单指引").InsertNew()
                \'Tables("清单指引").Position = Tables("清单指引").FindRow(dr.DataRow)
                r("子目编码") =dr("子目编码")
                r("项目特征描述") =dr("项目特征描述")
            End If
        Next
    End If
End If



.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2016.7.29.1
错误所在事件:清单指引,KeyDown
详细错误信息:
无法将类型为“System.Char”的对象强制转换为类型“Foxtable.DataRow”。

[此贴子已经被作者于2016/11/2 15:33:07编辑过]

--  作者:有点蓝
--  发布时间:2016/11/2 16:23:00
--  
If vars("drs") isnot nothing and vars("drs").count > 0 Then
--  作者:yancheng
--  发布时间:2016/11/2 16:29:00
--  
问题依旧。一样的弹错信息