找回密码
 立即注册

QQ登录

只需一步,快速开始

ryukinkou

中级会员

2

主题

6

帖子

562

积分

中级会员

积分
562

活字格认证

最新发帖
ryukinkou
中级会员   /  发表于:2012-6-11 11:39  /   查看:7236  /  回复:6
没有找到现成的方法。希望能够同时具备operation mode = normal的编辑功能和extended select的多行选择功能。
asp.net 5.0版本.

不知道有没有现成的好方法。

现在我的做法是把表格设定为normal,然后手动模拟按ctrl多行选择的方式

代码如下

    function init() {

        multiSelectRowNum = new Array();

        var spreadTest = FpSpread(spreadTestId);

        if (spreadTest.addEventListener) {
            spreadTest.addEventListener("ActiveCellChanged", activeCellChanged, false);
        }
        else
        {
            spreadTest.onActiveCellChanged = activeCellChanged;
        }

    }

    Array.prototype.uniquePush = function (element) {
        var isExisted = false;

        for (var i = 0; i < multiSelectRowNum.length; i++) {
            if (multiSelectRowNum == element) {
                isExisted = true;
                break;
            }
        }

        if (isExisted == false) {
            multiSelectRowNum.push(element);
        }
    }

    function activeCellChanged(event) {

        var spreadTest = FpSpread(spreadTestId);
        spreadTest.ClearSelection();

        multiSelectRowNum.uniquePush(spreadTest.ActiveRow);

        if ((spreadTest.ActiveCol == 3) && (window.event.ctrlKey == true)) {

            for (var i = 0; i < multiSelectRowNum.length; i++) {
                spreadTest.AddSelection(multiSelectRowNum, 0, 1, spreadTest.GetColCount());
            }

        } else if ((spreadTest.ActiveCol == 3) && (window.event.ctrlKey == false)) {

            multiSelectRowNum = new Array();
            multiSelectRowNum.uniquePush(spreadTest.ActiveRow);
            spreadTest.AddSelection(spreadTest.ActiveRow, 0, 1, spreadTest.GetColCount());

        } else {

            multiSelectRowNum = new Array();

        }

    }

就是手动维持一个选择多行的数组,然后按照数组中的值用addSelection来强行选择多行。

现在的问题是这样弄之后,后台取不到这个范围。

spreadObj.ActiveSheetView.SelectionModel中没有GetSelections方法。而且count为0,item为空。

请教怎么解决。或者有其他更好的方法。

6 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-6-11 14:45:00
沙发
回复 1楼ryukinkou的帖子

你好,请问楼主的意思是想不通过 Ctrl 键选择多行,而在后台取得选择的行吗?
可以通过以下方法实现:
  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.                 return;
  5.             //设置选择模式
  6.             this.FpSpread1.Sheets[0].OperationMode = FarPoint.Web.Spread.OperationMode.MultiSelect;
  7.             //取得所选行范围
  8.             FarPoint.Web.Spread.Model.CellRange[] selectRange = this.FpSpread1.Sheets[0].GetSelections();
  9.         }
复制代码
回复 使用道具 举报
ryukinkou
中级会员   /  发表于:2012-6-11 15:01:00
板凳
你好,我这样尝试了,但是他说spreadTest.Sheets没有这个方法

而且如果设定为多行选择的话。就不能进行表格编辑了

我是 for asp.net 5.0的。
回复 使用道具 举报
ryukinkou
中级会员   /  发表于:2012-6-11 15:02:00
地板
我的代码是这样的,VB代码

  1. spreadTest.ActiveSheetView.OperationMode = OperationMode.MultiSelect
  2.         Dim selectRange As FarPoint.Web.Spread.Model.CellRange() = spreadTest.Sheets(0).GetSelections()
复制代码


然后说没有getselections方法
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-11 16:08:00
5#
回复 4楼ryukinkou的帖子

ryukinkou 你好,下面是我的测试 Demo:

4820.zip (2.87 MB, 下载次数: 507)
回复 使用道具 举报
ryukinkou
中级会员   /  发表于:2012-6-11 16:34:00
6#
無題.JPG

你好,还是报错。

错误内容是没有这个方法。

我的版本是日文版的难道日文版有区别么 5.0j

而且还有问题,如果按照您的方式设定为MultiSelect的话,整个表就变成了只读表了,无法编辑。我想要实现表编辑和多行选择都可以实现。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-11 16:40:00
7#
回复 6楼ryukinkou的帖子

ryukinkou 你好,
GrapeCity 西安不提供日文版产品支持。我只能在英文环境下进行测试,所以这个问题还请楼主到日本论坛发贴询问:http://www.grapecity.com/tools/support/technical/knowledge.asp
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部