找回密码
 立即注册

QQ登录

只需一步,快速开始

江故里

初级会员

32

主题

120

帖子

306

积分

初级会员

积分
306

[处理中] spread内 行移动

江故里
初级会员   /  发表于:2024-9-19 14:22  /   查看:666  /  回复:3
本帖最后由 江故里 于 2024-9-20 09:00 编辑



spread 黄色行往下移动的时候 TSUIKA列的值还存在 DEL列的值也存在  
但是 黄色行往上移动的时候TSUIKA列的值就变成空了  但是DEL列的值存在
这是什么原因造成的  也没对这一列进行不同的设置
用的代码是 spdList_Sheet1.MoveRow(downVisibleRowIndex, selectedRowIndexStart, selectedRowCount, true);

3 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-9-19 17:38:36
沙发
请将你说的这个文件上传上来,并给一下对应你提到的向上移动和向下移动的MoveRow代码(包含参数的具体代码)
回复 使用道具 举报
江故里
初级会员   /  发表于:2024-9-20 11:02:18
板凳
本帖最后由 江故里 于 2024-9-20 11:22 编辑
Richard.Ma 发表于 2024-9-19 17:38
请将你说的这个文件上传上来,并给一下对应你提到的向上移动和向下移动的MoveRow代码(包含参数的具体代码 ...

用的是 v11
spdList_Sheet1.Protect = false;
spdList_Sheet1.Cells[44, tsuikaKubunIndex].Locked = false;44行为上移行
private void spreadRowMove()
        {
            CellRange[] cellRanges = spdList_Sheet1.GetSelections();
            if (cellRanges.Length <= 0)
                return;

            cellRanges = cellRanges.OrderBy(c => c.Row).ToArray();
            CellRange cellRange = cellRanges[0];
            int selectedRowIndexStart = cellRange.Row;
            int selectedRowCount = cellRange.RowCount;
            for (int i = 1; i < cellRanges.Length; i++)
            {
                CellRange c = cellRanges;
                if (c.Row > selectedRowIndexStart + selectedRowCount)
                {
                    int rowsBetweenRanges = c.Row - selectedRowIndexStart - selectedRowCount;
                    for (int j = 0; j < rowsBetweenRanges; j++)
                    {
                        if (spdList_Sheet1.Rows[selectedRowIndexStart + selectedRowCount].Visible == true)
                            return;
                        else
                            selectedRowCount = selectedRowCount + 1;
                    }
                }
                else
                    selectedRowCount = selectedRowCount + c.RowCount;
            }

           
                //一番下の行を選択する場合、処理なし
                if (selectedRowIndexStart + selectedRowCount >= spdList_Sheet1.RowCount)
                    return;
                //選択されている行の下の行番号を取得
                int downVisibleRowIndex = -1;
                for (int i = 0; i < spdList_Sheet1.RowCount - selectedRowIndexStart - selectedRowCount; i++)
                {
                    if (spdList_Sheet1.Rows[selectedRowIndexStart + selectedRowCount + i].Visible == true)
                    {
                        downVisibleRowIndex = selectedRowIndexStart + selectedRowCount + i;
                        break;
                    }
                    else
                        selectedRowCount = selectedRowCount + 1;
                }
                if (downVisibleRowIndex == -1)
                    return;

                //移動
                spdList_Sheet1.MoveRow(downVisibleRowIndex, selectedRowIndexStart, 1, true);
                spdList_Sheet1.ClearSelection();
                spdList_Sheet1.ActiveRowIndex = selectedRowIndexStart + 1;
                spdList_Sheet1.AddSelection(selectedRowIndexStart + 1, 0, selectedRowCount, spdList_Sheet1.ColumnCount);

                isChange = true;
            
        }
不走 spdList_Sheet1.MoveRow(downVisibleRowIndex, selectedRowIndexStart, 1, true);这句代码的话  tsuikaKubunIndex列当前单元格能够正常赋值 走了之后 locked = true; 值清空,再改回 locked =false 也无法赋值
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-9-20 18:28:00
地板
你给的这些代码我是没法直接运行起来的。里面的一些参数都是你在其他地方定义的。

如果必须要在你这些代码下才能复现问题的话,请给一个能复现问题的完整demo过来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部