首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

递归法添加节点到treeview的有关问题

2011-12-27 
递归法添加节点到treeview的问题?我的代码privatevoidBind_tvShowCity(TreeNodepNode,intpareID){DataView

递归法添加节点到treeview的问题?
我的代码
  private   void   Bind_tvShowCity(TreeNode   pNode,int   pareID)
        {
                DataView   dv   =   this.GetMangaeItem( "select   *   from   [infinityTree] ");
                dv.RowFilter   =   "[pareID]= "   +   pareID;
                TreeNode   tempNode   =   new   TreeNode();
                foreach   (DataRowView   drv   in   dv)
                {
                        if   (pNode==null)
                        {
                                tempNode.Text=drv[ "name "].ToString();
                                tempNode.NavigateUrl=drv[ "url "].ToString();
                                tempNode.Expanded   =   false;
                                this.tvShowCity.Nodes.Add(tempNode);
                                Bind_tvShowCity(tempNode,   Int32.Parse(drv[ "id "].ToString()));
                        }
                        else
                        {
                                tempNode.Text   =   drv[ "name "].ToString();
                                tempNode.NavigateUrl   =   drv[ "url "].ToString();
                                tempNode.Expanded   =   false;
                                pNode.ChildNodes.Add(tempNode);
                                Bind_tvShowCity(tempNode,   Int32.Parse(drv[ "id "].ToString()));
                        }
                }
        }
出错提示:
索引必须位于该列表的界限内。
参数名:   index  

我现在知道是这行:   pNode.ChildNodes.Add(tempNode);     有错,
我看别人做的是这样:pNode.Nodes.Add(tempNode);    

为什么我建的TreeNode   tempNode   =   new   TreeNode();
      在调pNode时,没有Nodes属性??

谢谢讲解??


[解决办法]
#region 递归绑定同一个表数据
private void InitTree()
{
DataTable dt = GetTreeViewTable();


DataView dv = new DataView(dt);
dv.RowFilter = "ParentID=0 ";
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[ "text "].ToString();
node.Value = drv[ "ID "].ToString();
node.Expanded = false;
TreeView1.Nodes.Add(node);
AddReplies(dt,node);
}
}

private DataTable GetTreeViewTable()
{
string constring = System.Configuration.ConfigurationSettings.AppSettings[ "ConnectionString "];
SqlConnection con = new SqlConnection(constring);
SqlDataAdapter da = new SqlDataAdapter( "SELECT * FROM treeview ", con);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

private void AddReplies(DataTable dt, TreeNode node)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID= ' " + node.Value + " ' ";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[ "text "].ToString();
replyNode.Value = row[ "ID "].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dt,replyNode);
}
}
#endregion
}

[解决办法]
专业邦定,,
[解决办法]
ChildNodes 是asp 2.0的treenode属性nodes是1.1的
[解决办法]
再稍稍优化一下代码
把 Bind_tvShowCity(tempNode, Int32.Parse(drv[ "id "].ToString())); 放到 if语句外面

private void Bind_tvShowCity(TreeNode pNode,int pareID)
{
DataView dv = this.GetMangaeItem( "select * from [infinityTree] ");
dv.RowFilter = "[pareID]= " + pareID;

foreach (DataRowView drv in dv)
{
//每次循环时都创建一个tempNode
TreeNode tempNode = new TreeNode();
if (pNode==null)
{
tempNode.Text=drv[ "name "].ToString();
tempNode.NavigateUrl=drv[ "url "].ToString();
tempNode.Expanded = false;
this.tvShowCity.Nodes.Add(tempNode);
}
else
{
tempNode.Text = drv[ "name "].ToString();
tempNode.NavigateUrl = drv[ "url "].ToString();
tempNode.Expanded = false;
pNode.ChildNodes.Add(tempNode);
}
//把两句相同的调用放到if外面
Bind_tvShowCity(tempNode, Int32.Parse(drv[ "id "].ToString()));
}
}

热点排行