ASP.NET treeview 树控件的节点上下移动

本文介绍如何在ASP.NET的TreeView控件中实现节点的上下移动,提供MSN和QQ联系方式供读者交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


直接上代码:

/// <summary>
    /// 上移
    /// </summary>
    protected void btnUp_Click(object sender, EventArgs e)
    {
        if (treeChapters.SelectedNode != null)
        {
            TreeNode sourceNode = treeChapters.SelectedNode;
            int intIndex = treeChapters.Nodes.IndexOf(treeChapters.SelectedNode);
            if (intIndex > 0)
            {
                treeChapters.Nodes.AddAt(intIndex - 1, sourceNode);
            }
            else if (intIndex != 0)
            {
                TreeNode tnParent = treeChapters.SelectedNode.Parent;
                int index = tnParent.ChildNodes.IndexOf(treeChapters.SelectedNode);
                foreach (TreeNode tnNode in tnParent.ChildNodes)
                {
                    if (treeChapters.SelectedNode.Value == tnNode.Value && index != 0)
                    {
                        TreeNode tnTemp = new TreeNode();
                        tnTemp = tnNode;
                        tnParent.ChildNodes.Remove(treeChapters.SelectedNode);
                        tnParent.ChildNodes.AddAt(index - 1, tnTemp);
                        //设置移动后要选择的节点
                        tnParent.ChildNodes[index - 1].Select();

                        //更新要往上移动的章节:ChapterId = treeChapters.SelectedNode.Value 的顺序为:index - 1
                        UpdateChapterOrderNo(CourseId, Convert.ToInt32(treeChapters.SelectedNode.Value), index - 1);
                        //更新往下移动的章节:tnParent.ChildNodes[index].value 的顺序为:index
                        UpdateChapterOrderNo(CourseId, Convert.ToInt32(tnParent.ChildNodes[index].Value), index);
                        break;
                    }
                }
            }
        }
    }

    /// <summary>
    /// 下移
    /// </summary>
    protected void btnDown_Click(object sender, EventArgs e)
    {
        if (treeChapters.SelectedNode != null)
        {
            TreeNode sourceNode = treeChapters.SelectedNode;
            int intCount = treeChapters.Nodes.Count;

            if (treeChapters.Nodes.IndexOf(treeChapters.SelectedNode) < intCount - 1 && treeChapters.Nodes.IndexOf(treeChapters.SelectedNode) >= 0)
            {
                int intIndex = treeChapters.Nodes.IndexOf(treeChapters.SelectedNode) + 1;
                treeChapters.Nodes.AddAt(intIndex, sourceNode);
            }
            else if (treeChapters.Nodes.IndexOf(treeChapters.SelectedNode) != intCount && treeChapters.Nodes.IndexOf(treeChapters.SelectedNode) < 0)
            {
                TreeNode tnParent = treeChapters.SelectedNode.Parent;
                int nodeCount = tnParent.ChildNodes.Count;
                TreeNode tnSelectedNode = new TreeNode();
                bool count = false;
                int index = tnParent.ChildNodes.IndexOf(treeChapters.SelectedNode);
                foreach (TreeNode tnNode in tnParent.ChildNodes)
                {
                    if (treeChapters.SelectedNode.Value == tnNode.Value)
                    {
                        count = true;
                        tnSelectedNode = tnNode;
                    }
                    
                    if (treeChapters.SelectedNode.Value != tnNode.Value && count == true)
                    {
                        tnParent.ChildNodes.Remove(treeChapters.SelectedNode);
                        tnParent.ChildNodes.AddAt(index + 1, tnSelectedNode);
                        //设置移动后要选择的节点
                        if (index + 1 >= nodeCount)
                        {
                            tnParent.ChildNodes[nodeCount - 1].Select();
                        }
                        else
                        {
                            tnParent.ChildNodes[index + 1].Select();
                        }
                        //TODO:更新当前要移动的章节:ChapterId = treeChapters.SelectedNode.Value 的顺序为:index + 1
                        UpdateChapterOrderNo(CourseId, Convert.ToInt32(treeChapters.SelectedNode.Value), index + 1);
                        // 更新从下往上移动的章节:tnParent.ChildNodes[index+1].value 的顺序为:index
                        UpdateChapterOrderNo(CourseId, Convert.ToInt32(tnParent.ChildNodes[index].Value), index );
                        break;
                    }
                }
                
            }
        }
    }

    /// <summary>
    /// 更新章节排序
    /// </summary>
    /// <param name="courseID">课程ID</param>
    /// <param name="chapterId">章节ID</param>
    /// <param name="orderNo">顺序</param>
    private void UpdateChapterOrderNo(int courseID, int chapterId, int orderNo)
    {
        oU_Chapter.ChapterId = chapterId;
        oU_Chapter.CourseID = courseID;
        oU_Chapter.OrderNo = orderNo;
        oU_ChapterLogic.UpdateChapterOrderNo(oU_Chapter);
    }


另附广告:女朋友的淘宝网店,为她做宣传,希望大家别介意,http://iyseek.taobao.com  欢迎大家逛逛,嘿嘿!

如有需要帮助,请联系MSN:zheng331773812@hotmail.com(上班时在线)   QQ:331773812

欢迎大家共同交流!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值