找回密码
 立即注册

QQ登录

只需一步,快速开始

viviant

注册会员

7

主题

15

帖子

50

积分

注册会员

积分
50

活字格认证

viviant
注册会员   /  发表于:2015-8-17 14:31  /   查看:13151  /  回复:13
重新给Spread的sheet的DataSource赋值后,滚动条位置会回到最上面,请问怎样才能使滚动条的位置不变
谢谢

13 个回复

倒序浏览
rbgongming
论坛元老   /  发表于:2015-8-17 14:44:00
沙发
回复 1楼viviant的帖子

你好,感谢你反应问题,请问你在第二次赋值的时候是不是对Spread的行列进行了清空的操作。
例如如下代码:
FpSpread1.ActiveSheet.RowCount = 0
FpSpread1.ActiveSheet.ColumnCount = 0

如果有,请删除类似代码,滚动条就会保持原有位置了。
请尝试,谢谢!!!
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
viviant
注册会员   /  发表于:2015-8-17 17:09:00
板凳
回复 2楼rbgongming的帖子

第二次赋值时没有对Spread的行列进行清空。
我现在的状况是,一个Spread中有三个sheet,
对第二个和第三个sheet进行第二次赋值时,第一个sheet的滚动条位置回到了最上面
回复 使用道具 举报
rbgongming
论坛元老   /  发表于:2015-8-17 17:20:00
地板
回复 3楼viviant的帖子

你好,您说的动作我已经理解,我建了一个新的工程,
按照你的说法也去测试了,没有重现你的问题。可以
上传个Demo吗?
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
viviant
注册会员   /  发表于:2015-8-18 16:00:00
5#
回复 4楼rbgongming的帖子


SPDScorll.zip (83.22 KB, 下载次数: 773)
回复 使用道具 举报
rbgongming
论坛元老   /  发表于:2015-8-18 16:36:00
6#
回复 5楼viviant的帖子

在LeaveCell事件最下面加上
FpSpread1.ActiveSheet.SetActiveCell(e.NewRow, e.NewColumn)
FpSpread1.ShowActiveCell(VerticalPosition.Nearest, HorizontalPosition.Nearest)
两句代码就好了,但是会闪动一下。

注 Spread多个Sheet的情况下共用同一滚动条。
所以当对第二个,第三个sheet赋值的时候它要设置滚动条位置的。
所以动了。你也可以试一试用三个Spread试一试。

评分

参与人数 1金币 +999 收起 理由
frank.zhang + 999 协助回答问题

查看全部评分

把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-20 09:14:00
7#
回复 5楼viviant的帖子

您好,
6#的解决方案是否已经解决了您的问题呢?
回复 使用道具 举报
viviant
注册会员   /  发表于:2015-8-21 10:21:00
8#
回复 7楼frank.zhang的帖子

因为我们工程数据量比较大,用上面的方法的话会很明显的是滚动条回到最上面后又回到原位置的,
现在我是想用这样的方法,你看是否可执行。
就是我更新sheet2,sheet3的DataSource时,spread先暂停描画,等滚动条回到原位置后,spread再进行描画

谢谢
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-21 17:45:00
9#
回复 8楼viviant的帖子

您好,
这个问题正在调查,下周一会给您反馈。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-24 16:02:00
10#
您好,
在最新的Spread的8上进行测试,这个问题已经解决了,建议您下载最新的版本进行测试。
http://www.gcpowertools.com.cn/products/download.aspx?pid=12

测试使用的代码:
  1.         For index As Integer = 1 To 5000
  2.             dt.Rows.Add(New Object() {index.ToString(), "1", "0", "乳製品", "ノンアルコール", "酪農ミルク", 21000})
  3.         Next
复制代码

  1.     Private Sub FpSpread1_LeaveCell(ByVal sender As System.Object, ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
  2.         'Dim i, j As Integer
  3.         'i = Me.FpSpread1.ActiveSheet.ActiveRowIndex()
  4.         'j = Me.FpSpread1.ActiveSheet.ActiveColumnIndex()
  5.         'Me.FpSpread1.SuspendLayout()
  6.         Dim ds As DataSet = createData()
  7.         Select Case Me.FpSpread1.ActiveSheet.SheetName
  8.             Case "Sheet1"
  9.                 Me.sht2.DataSource = ds.Tables(2)
  10.                 Me.sht3.DataSource = ds.Tables(1)
  11.         End Select
  12.         'Me.FpSpread1.ResumeLayout()
  13.         '.FpSpread1.ActiveSheet.SetActiveCell(i, j)
  14.         FpSpread1.ActiveSheet.SetActiveCell(e.NewRow, e.NewColumn)
  15.         FpSpread1.ShowActiveCell(VerticalPosition.Nearest, HorizontalPosition.Nearest)
  16.     End Sub
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部