找回密码
 立即注册

QQ登录

只需一步,快速开始

lrjnew

注册会员

10

主题

27

帖子

87

积分

注册会员

积分
87

活字格认证

lrjnew
注册会员   /  发表于:2014-8-7 10:06  /   查看:12124  /  回复:10
在Spread的CellChanged事件中加入判断,CellChanged事件触发的时候,若是表格的第一列,并且是最后一行(即最后一行的第一个单元格),就使用Rows.Add(Me.FpSpread1_Sheet1.Rows.Count, 1),在最后增加一行,实现了自动增加行的功能。

正常情况下,我从EXCEL中复制多行的数据粘贴上去,也会实现自动逐一增加。

但是,因为我的表格有几列是隐藏了的,在窗体加载的时候我加入了InputMap的自定义按键操作:im.Put(New FarPoint.Win.Spread.Keystroke(Keys.V, Keys.Control), FarPoint.Win.Spread.SpreadActions.ClipboardPasteAsStringSkipHidden),粘贴的时候跳过隐藏的列,然后我从EXCEL中复制多行的数据粘贴上去就变得不正常了,只能自动新增表格原有的行数(若表格只有一行就会新增一行,若表格原来有N行,就会逐一自动增加N行,如果复制的行数比N多,多出来的行没有自动增加,触发不了CellChanged事件),请帮忙解决,谢谢!

10 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-8-7 19:10:00
沙发
回复 1楼lrjnew的帖子

你好,
感谢你的问题反馈,为了便于调查问题,能否把你的Demo发上来我们进行调试?
回复 使用道具 举报
lrjnew
注册会员   /  发表于:2014-8-12 16:54:00
板凳
其实就是以下的CellChanged事件,如果表格里没有隐藏的列就能正常的自动一行一行的增加,如果有隐藏的列,那就只能增加表格中原本已经有的行的数量

  Private Sub FpSpread1_Sheet1_CellChanged(ByVal sender As Object, ByVal e As   FarPoint.Win.Spread.SheetViewEventArgs) Handles FpSpread1_Sheet1.CellChanged
        If e.Column = 0 Then
            Dim TxtStr As String = Me.FpSpread1_Sheet1.Cells(e.Row, e.Column).Text
            If TxtStr <> "" AndAlso e.Row = Me.FpSpread1_Sheet1.Rows.Count - 1 Then
                Me.FpSpread1_Sheet1.Rows.Add(Me.FpSpread1_Sheet1.Rows.Count, 1)
            End If
        End If
    End Sub

还有窗体初始化的时候加了自定义按键操作

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim im As New FarPoint.Win.Spread.InputMap
        im = Me.FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused)
        im.Put(New FarPoint.Win.Spread.Keystroke(Keys.C, Keys.Control),FarPoint.Win.Spread.SpreadActions.ClipboardCopyAsStringSkipHidden)
        im.Put(New FarPoint.Win.Spread.Keystroke(Keys.V, Keys.Control),FarPoint.Win.Spread.SpreadActions.ClipboardPasteAsStringSkipHidden)
        im = Me.FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
        im.Put(New FarPoint.Win.Spread.Keystroke(Keys.C, Keys.Control),FarPoint.Win.Spread.SpreadActions.ClipboardCopyAsStringSkipHidden)
        im.Put(New FarPoint.Win.Spread.Keystroke(Keys.V, Keys.Control),FarPoint.Win.Spread.SpreadActions.ClipboardPasteAsStringSkipHidden)
End Sub
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-12 17:36:00
地板
回复 3楼lrjnew的帖子

感谢你提供的代码,我会尝试重现这个问题并给你反馈。
回复 使用道具 举报
lrjnew
注册会员   /  发表于:2014-8-14 09:12:00
5#
回复 4楼iceman的帖子

请问问题解决了吗?有什么办法可以处理呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-14 09:58:00
6#
回复 5楼lrjnew的帖子

你好,

使用 Spread 7.0V4 没能重现你的问题,我的测试用例如下:
1.粘贴一行
2.粘贴多行
3.粘贴行数大于当前 Sheet 行数。
详细操作现象请参考视频:



测试demo(VS2013 + .NET 4.0 + C#+ Spread 7.0V4 ),看你那边是否能重现问题:


最大可能是我们之间的 Spread 版本有区别。
请对比我们操作或产品版本之间的不同,并把结果反馈给我们。

谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
lrjnew
注册会员   /  发表于:2014-8-14 14:25:00
7#
回复 6楼iceman的帖子

我用的是win form 5.0版本的.我觉得不是版本的区别.你的版本也出现这个问题,只是你没注意.
你再回看一下你的视频就知道了,你第二次复制的是15行数据,但是粘贴进去的只有11行,那是因为你粘贴前,表格只有11行,所以即使你复制了15行数据,最终也是成功触发了11行数据进去。

你试一下在表格初始化的时候,设置RowCount=1,然后直接复制多行粘贴进去看看就会看得明显一点了.
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-14 17:22:00
8#
回复 7楼lrjnew的帖子

是的,是我误看了,正在想办法看能否获取剪切板中的行数之后事先添加相应行来解决这个问题。关于 ClipBoard 的操作您也可以尝试实现下。
回复 使用道具 举报
lrjnew
注册会员   /  发表于:2014-8-19 15:13:00
9#
回复 8楼iceman的帖子

感觉用ClipBoard不是很合理,ClipBoard好像是正常工作的,只是SheetView接收有点问题,如果SheetView中原来的行数比要粘贴的行数少,就会出现多出来的数据没有触发CellChanged事件,只有增加了以下按键事件才会有这种情况出现:
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.V, Keys.Control),FarPoint.Win.Spread.SpreadActions.ClipboardPasteAsStringSkipHidden)

不知道有没有处理ClipboardPasteAsStringSkipHidden的办法呢?
回复 使用道具 举报
lrjnew
注册会员   /  发表于:2014-8-19 15:43:00
10#
回复 8楼iceman的帖子

先用Clipboard解决了,估计是逻辑问题
Private Sub FpSpread1_ClipboardPasting(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.ClipboardPastingEventArgs) Handles FpSpread1.ClipboardPasting
        Dim StrArr As String() = My.Computer.Clipboard.GetText().Split(Chr(10))
        If Me.FpSpread1_Sheet1.RowCount &lt; StrArr.Length Then
            Me.FpSpread1_Sheet1.RowCount = StrArr.Length
        End If
    End Sub

我猜是因为我设置了ClipboardPasteAsStringSkipHidden,所以如果SheetView中原来的行比复制的数据行少,在粘贴的时候,FpSpread就认为其他的行是隐藏的,然后跳过,就只能粘贴一部分数据,触发不到CellChanged事件了

评分

参与人数 1金币 +500 收起 理由
iceman + 500 反馈问题处理方法、结果及提交bug。

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部