本人在用C#中c/s结构中用到结点上下移动的问题.移动的结点我还有子结点,请高人指教,本人不胜感激.

解决方案 »

  1.   

    给你我的源码!把多于的东西删掉就可以了。
    #region 移动节点
            private void tsbDown_Click(object sender, EventArgs e)
            {
                MoveNodesUp(false);
            }        private void tsbUp_Click(object sender, EventArgs e)
            {
                MoveNodesUp(true);
            }        private void MoveNodesUp(bool bUp)
            {
                if (treeView.SelectedNode != null && treeView.SelectedNode.Parent != null)
                {
                    TreeNode moveNode = treeView.SelectedNode;
                    int iTotolNodes = moveNode.Parent.Nodes.Count;//看本级节点一共有多少个                int iNodeIndex = treeView.SelectedNode.Index;//本节点的Index
                    if (iNodeIndex == 0 && bUp)
                    {
                        MessageBox.Show("本节点已经是本级第一个节点了,不可以再上移了");
                    }
                    else
                        if (iNodeIndex == iTotolNodes - 1 && !bUp)
                        {
                            MessageBox.Show("本节点已经是本级最后一个节点了,不可以再下移了");
                        }
                        else
                        {//移动的节点                           iNodeIndex = (bUp ? iNodeIndex - 1 : iNodeIndex + 1);//如果上移就-1                        TreeNode parentNode = moveNode.Parent;                       //父节点                           TreeNode neighborNode = parentNode.Nodes[iNodeIndex];                        treeView.SelectedNode.Remove();
                            parentNode.Nodes.Insert(iNodeIndex, moveNode);                        //移动之后要修改被其上一个或下一个节点的Dply_NO
                            treeView.SelectedNode = moveNode;                        //调整表中相关字段
                            DataRow row1 = dataSet.Tables["SYS_T"].Rows.Find(moveNode.Tag.ToString());//根据GUID找到相关行
                            int iDply_No1 = bUp ? -1 : 1;
                            row1["Dply_No"] = Convert.ToInt32(row1["Dply_No"]) + iDply_No1;                        DataRow row2 = dataSet.Tables["SYS_T"].Rows.Find(neighborNode.Tag.ToString());//根据GUID找到相关行
                            int iDply_No2 = bUp ? 1 : -1;
                            row2["Dply_No"] = Convert.ToInt32(row2["Dply_No"]) + iDply_No2;
                        }
                }
                else
                {
                    MessageBox.Show("没有选中节点或不可以移动此节点");
                }
            }
            #endregion
      

  2.   

    我这个树的节点的Tag跟存储这棵树的表的主键绑定的。对你来讲就两句话有用:
    treeView.SelectedNode.Remove();
    parentNode.Nodes.Insert(iNodeIndex, moveNode);这是标准做法了。