`
tiansoft
  • 浏览: 175625 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

treelist上下节点上下移动

阅读更多
前几天公司做了一个项目,在我做的子模块中,有节点上下移动的功能,要求如下:
1.上移:与同级上一节点调换位子,即与上一节点调换顺序号
2.下移:与同级下一节点调换位子,即与下一节点调换顺序号
这个问题想了很久,终于做出来了,虽然效率不是多么的好,但还是实现了功能,所以把它记在上面,以后要使用的时候,可以直接可以用,首先新建几个按钮,添加按钮事件,并在按钮事件上添加代码如下:
         
/**
         *页面刷新
          
         */
        private void LoadData()
        {
            //清空数据连接
            this.treeList.DataSource = null;
            //重新加载数据库
            this.物料分类TableAdapter1.Fill(this.dataSet_Data1.物料分类);
            this.treeList.DataSource = this.物料分类BindingSource1;
           
        }     

   /**
         *
         * 实现上移的方法
          *
         */
        private void barButtonItem上移_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //如果当前没有节点,直接终止
            if (this.treeList.FocusedNode==null) {
                //提示用户
                MessageBox.Show("没有选择要移动的节点,请选择!", "提示");
                //程序终止
                return;
            }
            //获取当前鼠标所在的节点
            TreeListNode curnode = this.treeList.FocusedNode;
            //获得当前鼠标所在节点的上一个节点
            TreeListNode prenode = curnode.PrevNode;
            //如果上一个节点为空的话,直接终止
            if (prenode == null) {
                //提示用户
                MessageBox.Show("在同级中已经是最顶节点,不能移动","提示");
                //程序终止
                return;
            }
            //获取当前鼠标所在节点的所有信息记录
            DataRowView currow = this.treeList.GetDataRecordByNode(this.treeList.FocusedNode) as DataRowView;
            //获取当前鼠标所在节点上一个节点的所有信息记录
            DataRowView prerow = this.treeList.GetDataRecordByNode(this.treeList.FocusedNode.PrevNode) as DataRowView;
            try
            {  
                //交换两个节点的顺序号
                prerow.BeginEdit();
                currow.BeginEdit();
                object obj = prerow["顺序号"];
                prerow["顺序号"] = currow["顺序号"];
                currow["顺序号"] = obj;
                prerow.EndEdit();
                currow.EndEdit();
               
            }
            catch (NullReferenceException ex)
            {
                //扑捉空指针异常
                MessageBox.Show("错误信息"+ex);

            }
           
            //如果该节点存在父节点
            if (curnode.ParentNode != null)
            {
                //在父节点的指定子节点中添加一个节点
                curnode.ParentNode.SetValue(curnode.Id + 1, prenode);
            }
            else {
                //在树形结构中的指定位置添加一个节点
                this.treeList.AppendNode(curnode.Id + 1, prenode);
            }
            //数据库接受改变
            this.dataSet_Data1.物料分类.AcceptChanges();
            //调用exchang方法,实现数据库中顺序号的改变
            Exchange(currow["编号"].ToString(), prerow["编号"].ToString());
            //调用页面刷新方法
            LoadData();
            //展开所以的树节点
            this.treeList.ExpandAll();
            //把焦点置在当前节点的上一个节点上
            this.treeList.SetFocusedNode(curnode);
        }
        /**
         * 实现下移的方法
         *
         */
        private void barButtonItem下移_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //如果当前节点没有节点,直接终止
            if (this.treeList.FocusedNode == null) {
                //提示用户
                MessageBox.Show("没有选择要移动的节点,请选择!","提示");
                //程序终止
                return;
            }
            //获取当前鼠标所在的节点
            TreeListNode curnode = this.treeList.FocusedNode;
            //获取当前鼠标所在节点的上一个节点
            TreeListNode nextnode = curnode.NextNode;
            //如果所获取的下一个节点为空,直接终止
            if (nextnode == null) {
                //提示用户
                MessageBox.Show("在同级中已经是最后节点,不能移动","提示");
                //程序终止
                return;
            }
            //获取当前鼠标所在节点的所有信息记录
            DataRowView currow = this.treeList.GetDataRecordByNode(this.treeList.FocusedNode) as DataRowView;
            //获取当前鼠标所在节点下一个节点的所有信息记录
            DataRowView nextrow = this.treeList.GetDataRecordByNode(this.treeList.FocusedNode.NextNode) as DataRowView;
            try
            {
                //交换两个节点的顺序号
                nextrow.BeginEdit();
                currow.BeginEdit();
                object obj = nextrow["顺序号"];
                nextrow["顺序号"] = currow["顺序号"];
                currow["顺序号"] = obj;
                nextrow.EndEdit();
                currow.EndEdit();

            }
            catch (NullReferenceException ex)
            {
                //扑捉空指针异常
                MessageBox.Show("错误信息" + ex);

            }
           
            //如果存在父节点
            if (curnode.ParentNode != null)
            {
                //在父节点的指定子节点上添加一个节点
                curnode.ParentNode.SetValue(curnode.Id, nextnode);
            }
            else {
               
                //不存在父节点,在树形结构中的指定位置添加一个节点
                this.treeList.AppendNode(curnode.Id,nextnode);
            }
            //数据库接受改变
            this.dataSet_Data1.物料分类.AcceptChanges();
            //调用exchang方法,实现数据库中顺序号的改变
            Exchange(currow["编号"].ToString(), nextrow["编号"].ToString());
            //调用页面刷新方法
            LoadData();
            //展开所以的树节点
            this.treeList.ExpandAll();
            //把焦点置在当前节点的下一个节点上
            this.treeList.SetFocusedNode(nextnode.NextNode);
          
        }

        /**
         *
         * 交换物料分类表字段顺序号的实现方法
         *
         */
        private void Exchange(string id1, string id2) {
           
            //初始化顺序号1
            int id_one = 0;
            //初始化顺序号2
            int id_two = 0;
            //把从数据库中获得的值传给顺序号
            id_one = this.物料分类TableAdapter1.ScalarQuery顺序号(Convert.ToInt32(id1)).Value;
            id_two = this.物料分类TableAdapter1.ScalarQuery顺序号(Convert.ToInt32(id2)).Value;
            //调用修改数据库信息的数据源
            this.物料分类TableAdapter1.UpdateQuery修改(id_one, Convert.ToInt32(id2));
            this.物料分类TableAdapter1.UpdateQuery修改(id_two, Convert.ToInt32(id1));
        }
这个程序做得很辛苦,值得珍藏!
分享到:
评论

相关推荐

    DEV中的treelist使用方法

    本文将详细介绍如何在C#中使用DevExpress的`Treelist`控件,包括添加节点、获取单元格数据、删除节点、添加图片以及设置背景颜色等操作。 #### 二、添加节点 `Treelist`的一个核心功能就是能够动态地添加节点。根据...

    使用递归获取TreeList中所有勾选的结点

    在TreeList中,每个节点可能有子节点,这些子节点又可能有它们自己的子节点,以此类推,形成一个深度未知的树状结构。 TreeList控件通常提供API或事件,允许开发者访问和操作其节点。例如,它可能有一个`Nodes`集合...

    DevExpress设置TreeList图片节点背景色的方法

    本篇将详细介绍如何在DevExpress TreeList中设置图片节点的背景色。 首先,我们可以利用DevExpress TreeList的`CustomDrawNodeImages`事件来实现自定义绘制节点图像的功能。这个事件在控件绘制节点图像时触发,允许...

    DevExpress实现TreeList父子节点CheckState状态同步的方法

    在DevExpress的TreeList控件中,我们可以利用`AfterCheckNode`事件来监听用户对节点的勾选操作。在该事件的处理函数中,我们可以编写逻辑来同步父子节点的CheckState。 文章提供的代码实现了一个静态方法`...

    DevExpress TreeListLookUpEdit 判断有子节点时展开

    在“DevExpress TreeListLookUpEdit 判断有子节点时展开”这个场景中,开发者可能希望实现一种交互模式:当用户双击一个节点时,如果该节点有子节点,则进行收缩;如果单击节点,那么只有在没有子节点的情况下才选择...

    Treelist使用实例(添加右击菜单)

    在 MouseDown 事件中,判断如果用户右击了某个节点,则显示右击菜单。下面是一个示例代码: `private void treeList1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { // ...

    详解在DevExpress程序中使用TreeList控件以及节点查询的处理

    - 当用户在SearchControl中输入查询文本时,可以监听其`TextChanged`事件,调用TreeList的`FindBestNode`或`FindNodeByText`方法来定位匹配的节点,并可能需要滚动到相应的节点位置。 4. **TreeList高级特性** - ...

    TreeList结合XML形成树节点

    在这个场景中,我们将探讨如何使用C#编程语言,结合`TreeList`控件和XML数据来构建树节点,从而实现一个功能丰富的用户界面。 首先,让我们了解`TreeList`。`TreeList`通常在.NET Framework中的DevExpress库中提供...

    DevExpress实现TreeList向上递归获取符合条件的父节点

    本文将详细解析如何利用DevExpress的TreeList控件实现向上递归获取符合条件的父节点这一功能。 首先,我们要理解TreeList的基本概念。TreeList控件允许用户以树形结构显示数据,每个节点可以有子节点,形成层级结构...

    DevExpress实现TreeList向上递归获取公共父节点的方法

    在上下文中,递归用于遍历TreeList的层级结构,从选定节点开始,逐级向上检查父节点,直到找到满足特定条件的公共父节点。 核心功能代码如下: 1. `GetParentNode` 方法:这是一个递归方法,接收一个当前节点和一...

    DevExpress实现TreeList按条件隐藏节点CheckBox的方法

    本文实例讲述了DevExpress实现TreeList按条件隐藏节点CheckBox的方法,在项目开发中有一定的使用价值。具体的实现方法如下: 主要功能代码如下: /// /// 隐藏CheckBox /// 说明 /// 在CustomDrawNodeCheckBox事件...

    TreeList树型组件

    2. **节点模板**:利用TreeList的节点模板功能,可以定制节点内容,展示电话号码。 3. **点击事件**:监听书名节点的点击事件,触发电话号码的展示。 4. **拨号功能**:点击电话号码后,系统需要调用拨号API或插件,...

    DEV中的treelist使用方法.pdf

    TreeList适用于需要在单元格中添加数据的情况,它能够以树状结构显示数据并支持多层节点管理。而GridControl1更适合于单纯的数据读取或检索,因为它以表格形式展示数据,而不具备TreeList的层级管理特性。 二、...

    纯C的TreeList,可折叠可编辑树状多列列表

    TreeList是一种数据结构,它结合了树形结构和表格数据的特点,通常用于显示层次结构的数据,并且可以在每一层节点上展示多个属性。在本场景中,我们讨论的是一个纯C实现的TreeList,具备可折叠和可编辑的功能,这...

    DevExpress TreeList 数据绑定

    当需要对TreeList进行操作,如添加、删除或更新节点时,KeyFieldName属性就变得至关重要,因为它确保了数据操作的准确性。 三、ParentFieldName属性 ParentFieldName属性则定义了数据源中表示父节点关系的字段名。...

    .net treeList 的基本使用

    首先,`TreeList`控件通常用于Windows Forms或ASP.NET环境中,它允许用户以树形结构显示数据,每个节点可以有子节点,形成一个多级结构。在C#中,我们可以使用DevExpress、Telerik等第三方库来获取`TreeList`控件,...

    TreeList代码示例

    6. 编程操作:除了通过界面交互,还可以通过编程来添加、删除、移动节点,或者改变节点的状态。 7. 性能优化:对于大数据集,可能需要分页加载或懒加载数据,以提高性能。递归加载就是一种实现方式,只在需要时加载...

Global site tag (gtag.js) - Google Analytics