请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

ghostlyt

初级会员

18

主题

76

帖子

214

积分

初级会员

积分
214

活字格认证微信认证勋章

ghostlyt
初级会员   /  发表于:2015-11-15 21:55  /   查看:6532  /  回复:7
版本:Spread For WinForms 7.0J
现象:
调用SpreadSheet的RemoveRows方法进行行删除时,
选择状态不会发生变化。
例:当前状态为图1

图1

图1


调用Sheet.RemoveRows(0, 2)之后变为图2

图2

图2


需求:
RemoveRows之后,想变成图3的样子

图3

图3


试着用RemoveSelection方法,但是达不到上面的效果。
关于此问题应该怎么解决?

7 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-11-16 14:27:00
沙发
您好,

实现的思路是在删除事件里面做处理,
先拿到ActiveCell的行和列,然后删除两行,
再设置一个SetActiveCell,我的例子比较简单,只是一个简单的思路,您需要添加一个边界的判定。
  1.         private void button1_Click(object sender, EventArgs e)
  2.         {

  3.             int a = fpSpread1.ActiveSheet.ActiveCell.Row.Index;
  4.             int b = fpSpread1.ActiveSheet.ActiveCell.Column.Index;
  5.             this.fpSpread1.ActiveSheet.RemoveRows(0, 2);

  6.             fpSpread1.ActiveSheet.SetActiveCell(a - 2, b);
  7.         }
复制代码
回复 使用道具 举报
ghostlyt
初级会员   /  发表于:2015-11-16 19:09:00
板凳
回复 2楼frank.zhang的帖子

其实活动单元格不是重点,而是那两个选中行。
行删除前处于选中状态,行删除后变为非选中状态了。
而业务里面需要根据其选中状态做某些操作。

具体想达到的就是某行的选中状态要跟该行绑定,
该行移动时其对应的选中状态也跟着移动。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-11-17 14:12:00
地板
您好,

Spread里面有Selection可以实现选中相关操作
GetSelections是拿到选择的区域,AddSelection是添加一个选择区域。
  1.         private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.Model.CellRange[] cr;
  4.             cr = fpSpread1.ActiveSheet.GetSelections();
  5.             int a = fpSpread1.ActiveSheet.ActiveCell.Row.Index;
  6.             int b = fpSpread1.ActiveSheet.ActiveCell.Column.Index;
  7.             this.fpSpread1.ActiveSheet.RemoveRows(0, 2);
  8.             fpSpread1.ActiveSheet.SetActiveCell(a - 2, b);
  9.             fpSpread1.ActiveSheet.AddSelection(0, 0, 2, 10);
  10.         }
复制代码
回复 使用道具 举报
ghostlyt
初级会员   /  发表于:2015-11-17 18:30:00
5#
回复 4楼frank.zhang的帖子

对于Selection进行操作是件很复杂的事情。
比如现在Selection区域是3-4行,
我删除前两行后,就要先取得当前Selection的区域,
根据删除的行计算出应该选中1-2行区域,
然后清掉3-4行的Selection,
最后再用AddSelection选中1-2行。
这个过程Spread不能直接提供,必须手动控制吗?
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-11-18 10:17:00
6#
您好,

非常抱歉,给您的使用带了不便。
经过验证确实没有更加简便的方法。这个问题也跟产品经理沟通了,主要是产品的定位的导致的。
我们默认的策略就是选择的行不变,这个方式是最简单的方式,也是适用大部分使用场景的。一个简单的例子就是删除这一行的数据,如果进行调转的用户就会不能清晰的看到数据被删除了,并且如果行数较多的情况下,还会使Spread的滚动条滚动。所有,我们选择了这个最简单的策略。

另外,我们产品的定位是可以订制的Excel,我们提供尽可能多的接口,来满足用户自定义的需求。同时,就会产生一个问题,就是操作力度。您从事软件开发有很多的经验,也能够理解,操作的力度和操作的便捷是两个相反的方向。用户越便捷操作的力度就越粗,我们在这两个当中选择了尽可能细的操作力度,所有在使用中有很多地方需要您自己来实现,确实使用起来比较麻烦,希望能够谅解。
回复 使用道具 举报
ghostlyt
初级会员   /  发表于:2015-11-18 14:25:00
7#
回复 6楼frank.zhang的帖子

好的明白了,谢谢版主的回答。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-11-18 17:29:00
8#
回复 7楼ghostlyt的帖子

不客气
有问题欢迎随时来提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部