找回密码
 立即注册

QQ登录

只需一步,快速开始

love_me_dog

银牌会员

4

主题

14

帖子

2648

积分

银牌会员

积分
2648

活字格认证

最新发帖
love_me_dog
银牌会员   /  发表于:2013-7-23 11:37  /   查看:10452  /  回复:10
1拖出.jpg
如图,第一行的3列已经合并。
1.列拖动时,如何将其拆分?
2.如果又将拖动的列拖动回去,如何复原呢?
请问一下,内部是否有这样的处理属性?有什么可以解决的办法呢?

10 个回复

倒序浏览
Ally
葡萄城公司职员   /  发表于:2013-7-23 16:13:00
沙发
您好!
Spread 不支持合并区域列的拖动。如果希望移动合并列,可以使用MergePolicy属性。对于上面的例子,可以运行以下代码:
fpSpread1.AllowColumnMove = true;
fpSpread1.AllowColumnMoveMultiple = true;
fpSpread1.ActiveSheet.Rows[0].MergePolicy = FarPoint.Win.Spread.Model.MergePolicy.Always;
如果第一行中cell的值相等那么这些cell将自动合并,合并后,列是可以被拖动的。
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2013-7-23 16:21:00
板凳
回复 2楼Ally的帖子

谢谢,其实用自己的代码逻辑可以实现拆分单元格。但是唯一无法解决的问题(也是我对贵公司的期待)是当单列拖入到合并列后无法触发ColumnDragMoveCompleted事件。无法得知用户到底拖动到第几列,这个是最大的难点。希望你们能够处理相应的内容。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-7-23 18:18:00
地板
回复 3楼love_me_dog的帖子

love_me_dog 你好,
问题正在处理中,明天回复
回复 使用道具 举报
Ally
葡萄城公司职员   /  发表于:2013-7-24 13:54:00
5#
您好,运行以下代码后发现可以触发ColumnDragMoveCompleted。是不是下面的代码不能实现您的需求呢?[其实用自己的代码逻辑可以实现拆分单元格],那麻烦把具体的逻辑贴出来我们帮您看看,然后找到好的解决方案。
public Form1()
        {
            InitializeComponent();
            fpSpread2.AllowColumnMove = true;
            fpSpread2.AllowColumnMoveMultiple = true;
            fpSpread2.ActiveSheet.Rows[0].MergePolicy = FarPoint.Win.Spread.Model.MergePolicy.Always;
            fpSpread2.ColumnDragMoveCompleted += new DragMoveCompletedEventHandler(fpSpread2_ColumnDragMoveCompleted);
        }
        void fpSpread2_ColumnDragMoveCompleted(object sender, DragMoveCompletedEventArgs e)
        {
            int moveTo = e.ToIndex;
        }
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2013-7-24 14:43:00
6#
回复 5楼Ally的帖子


1拖入.jpg (12.74 KB, 下载次数: 1463)
回复 使用道具 举报
Ally
葡萄城公司职员   /  发表于:2013-7-24 16:50:00
7#
有个地方觉得很奇怪,你拆分合并单元格的操作是在ColumnDragMove事件中做的,如果第一行中C列和D列合并,当拖动D列时,是不会触发ColumnDragMove事件的,也就是说拆分单元格的操作是不会被执行的。
回复 使用道具 举报
山水
初级会员   /  发表于:2013-7-24 18:31:00
8#
您好,如同您所说,当试图拖动一列到有merge cell的区域时,因为拖动操作不能成功执行,所以无法触发fpSpread1_ColumnDragMoveCompleted事件,故无法得知用户到底拖动到第几列。
以下代码能够得到用户试图拖动到第几列:
    public partial class Form1 : Form
    {
        bool isColumnDragMove = false;
        int moveFromColumnIndex;
        int moveToColumnIndex;

        public Form1()
        {
            InitializeComponent();
            this.fpSpread1.ColumnDragMove += fpSpread1_ColumnDragMove;
            this.fpSpread1.MouseUp += fpSpread1_MouseUp;
        }

        void fpSpread1_MouseUp(object sender, MouseEventArgs e)
        {
            if (isColumnDragMove)
            {
                HitTestInformation hitInfo = fpSpread1.HitTest(e.X, e.Y);
                if (hitInfo.Type == HitTestType.Viewport)
                {
                    moveToColumnIndex = hitInfo.ViewportInfo.Column;
                }
                else if (hitInfo.Type == HitTestType.ColumnHeader)
                {
                    moveToColumnIndex = hitInfo.HeaderInfo.Column;
                }

                if (moveToColumnIndex > moveFromColumnIndex) //从左向右移动
                {
                    //移动的列试图插入到moveToColumnIndex之后
                    //写自己的处理代码
                }
                else//从右向左移动
                {
                    //移动的列试图插入到moveToColumnIndex之前
                    //写自己的处理代码
                }

                isColumnDragMove = false;
            }
        }

        void fpSpread1_ColumnDragMove(object sender, FarPoint.Win.Spread.DragMoveEventArgs e)
        {
            isColumnDragMove = true;
            moveFromColumnIndex = e.Index;
        }
    }

请试之。
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2013-7-24 18:45:00
9#
回复 7楼Ally的帖子

我在拖动执行之前已经将此列中有合并的行拆分了,所以可以执行拖动。
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2013-7-24 18:45:00
10#
回复 8楼山水的帖子

谢谢,我试一下。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部