江故里 发表于 2024-9-19 14:22:08

spread内 行移动

本帖最后由 江故里 于 2024-9-20 09:00 编辑



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

Richard.Ma 发表于 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.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;
            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.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.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 发表于 2024-9-20 18:28:00

你给的这些代码我是没法直接运行起来的。里面的一些参数都是你在其他地方定义的。

如果必须要在你这些代码下才能复现问题的话,请给一个能复现问题的完整demo过来
页: [1]
查看完整版本: spread内 行移动