日期:2014-05-19  浏览次数:20819 次

winform中树与数据库绑定后上下移动树节点的问题
数据库是这样建立的:
ID:编号
LayerLever:节点的级别
LayerValue:   节点的实际值(如果是叶节点则是实际值,根节点则是1,2,3..排序不重合即可)
LayerName:节点的名字
parentID:父节点(一级根目录的parentID是root,二级是root-1,三级是root-1-1,依次类推)
hasChild:是否有父节点

初始化树是这样实现的:
DataRow[]   selectedRows;
TreeNode   tNode,   currentNode;
for   (int   i   =   1;   i   <   128;   i++)   //设定列表的大循环(1级根节点,2级根节点..)
{
        selectedRows   =   dsLayer.Tables[0].Select( "LayerLevel= "   +   i.ToString());
        if   (selectedRows.Length   ==   0)
        {
                break;
        }
        foreach   (DataRow   dr   in   selectedRows)
        {
                tNode   =   new   TreeNode();
                if   (i   ==   1)
                {
                        tNode.Name   =   dr[4].ToString()   +   "- "   +   dr[2].ToString();
                        tNode.Text   =   dr[3].ToString();
                        tNode.Tag   =   dr[0].ToString();
                        treeView1.Nodes.Add(tNode);
                        continue;
                  }

                  currentNode   =   treeView1.Nodes.Find(dr[4].ToString(),   true)[0];
                  if   (!(bool)dr[ "HasChild "])
                  {
                            tNode.Name   =   dr[2].ToString();
                    }
                    else
                    {
                            tNode.Name   =   dr[4].ToString()   +   "- "   +   dr[2].ToString();
                      }
                      tNode.Text   =   dr[3].ToString();
                      tNode.Tag   =   dr[0].ToString();                                  
                      currentNode.Nodes.Add(tNode);
          }
}
上述代码中,dsLayer为数据库表映射到内存的映射表。dr[0]为ID,dr[2]为LayerValue,dr[3]为LayerName,dr[4]为parentID。现在的情况是增加,删除,修改功能都实现了,都是通过sql语句。现在是上移和下移遇到了问题,根节点的上移和下移不仅要改变ID,而且还要改变parentID的值。大家帮忙看看应该怎么实现啊?或者再在数据库里面加个什么字段啊?