找回密码
 立即注册

QQ登录

只需一步,快速开始

longsences

初级会员

16

主题

57

帖子

384

积分

初级会员

积分
384

活字格认证微信认证勋章

longsences
初级会员   /  发表于:2016-3-28 14:30  /   查看:7127  /  回复:12
版主好:


     近期在使用SPREAD时,需要进行多选操作,但在多选择时碰到了个问题,如下:


   多选,一种是连续性的多先,那大家习惯性的使用鼠标拖拉,直接选中即可.对于不连续的则可能使用CTRL进行,还有一种组合的情况,就是先鼠标拖拉再使用CTRL进行选择,但自己的测试情况如下:
Dim selModel As FarPoint.Win.Spread.Model.BaseSheetSelectionModel
        selModel = fpGrid.ActiveSheet.Models.Selection
A情况:        MsgBox(selModel.Count)

B情况:        MsgBox(fpGrid.ActiveSheet.GetSelection(0).RowCount)


对于鼠标拖拉只有B情况能够获取到实际的选择中行业,A情况用鼠标连续性的拖拉则只获取到一行.
二对于CTRL进行选择时,则A情况是可获取到实际的选中行数,


对于多种组合方式进行选择时,如何能够判断出实际的选中行数这个问题如何解决要?

感谢版主.

12 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-28 15:18:05
沙发
您可能对GetSelection(0)方法理解有误区,这个只是获取第一个选择区域。GetSelection(1)是获取第二个选择区域。
您可以使用fpSpread1.ActiveSheet.GetSelections() 这个是返回所有的选择区域,返回的是一个数组。里面是所有的选择区域,您遍历下就能获取到所有选择行。选择行会有会重复,不要重复计算就行了。
回复 使用道具 举报
longsences
初级会员   /  发表于:2016-3-28 16:47:10
板凳
噢,这个是可以返回一个数组,但是问题就是用鼠标拖拉实现不了.但是CTRL可以的.
回复 使用道具 举报
longsences
初级会员   /  发表于:2016-3-28 16:48:17
地板
我是想用户的操作是很随意的,应该可以实现连续的用户拖拉选中,单独的行再加上CTRL来选中,这样用户体验会好很多啊.
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-29 10:42:53
5#
longsences 发表于 2016-3-28 16:48
我是想用户的操作是很随意的,应该可以实现连续的用户拖拉选中,单独的行再加上CTRL来选中,这样用户体验会好 ...

不是很理解你的需求了,当设置fpSpread1.ActiveSheet.SelectionPolicy = FarPoint.Win.Spread.Model.SelectionPolicy.MultiRange;后 用户是可以随意选择区域的,单击,拖拽,按住ctrl拖拽单击都是支持的。
然后使用fpSpread1.ActiveSheet.GetSelections() 的方法可以获取到所有的选择区域。不知道你还需要什么。
回复 使用道具 举报
longsences
初级会员   /  发表于:2016-3-29 14:47:25
6#
dexteryao 发表于 2016-3-29 10:42
不是很理解你的需求了,当设置fpSpread1.ActiveSheet.SelectionPolicy = FarPoint.Win.Spread.Model.Sele ...

谢谢版主,我的需求点就是在当连续性的用鼠标拖拉的方式选中两行时,获取选中的行时只返回一行,难道是我的设置的原因?我拖拉选中两行,用GetSelections只返回1.
回复 使用道具 举报
longsences
初级会员   /  发表于:2016-3-29 15:02:16
7#
dexteryao 发表于 2016-3-29 10:42
不是很理解你的需求了,当设置fpSpread1.ActiveSheet.SelectionPolicy = FarPoint.Win.Spread.Model.Sele ...

但用CTRL时返回就是2
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-29 15:18:13
8#
longsences 发表于 2016-3-29 15:02
但用CTRL时返回就是2

明白你的误区在哪里了,GetSelections返回的是一个 CellRange 的数组, 您做拽两行其实一个选择区域,这个区域包括了两行。
您用Ctrl选中两行,其实是两个区域,每个区域有一行。

CellRange 包含四个属性
NameDescription

Column选择区域最左上角单元格的列号,-1表示正行被选中

ColumnCount选择区域的总列数

Row选择区域最左上角单元格的行号 ,-1表示整列被选中

RowCount选择区域的总行数  


回复 使用道具 举报
longsences
初级会员   /  发表于:2016-3-29 17:14:25
9#
dexteryao 发表于 2016-3-29 15:18
明白你的误区在哪里了,GetSelections返回的是一个 CellRange 的数组, 您做拽两行其实一个选择区域,这 ...

噢,这样啊.我明白了,当时还真没有这样测试过.

感谢,版主.
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-29 17:16:21
10#
您需要选中行数,就从这里遍及就好了,不要重复计算以及计算过的行就行了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部