我现在只想用asp.net的treeview控件做一个动态树.可就是不显示,对数据表有什么要求吗?
还有在treeview控件的属性里有什么东西吗?用跟踪,也能看到 ParentId值,怎么没进入foreach()呀。这是我的表
CREATE TABLE [TableName] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ParentId] [int],
[ParentName] [nvarchar] (64),
[Img_url] [nvarchar] (64)) ON [PRIMARY]
GO这是我的代码
private void InitTreeView(TreeNodeCollection nds,int parentId)
{
TreeNode tmpNd;
DataView dv = new DataView(); SqlConnection Sql_Conn = new SqlConnection("server=;uid=sa;pwd=;database=");
SqlDataAdapter Sql_Da = new SqlDataAdapter("select * from TableName",Sql_Conn); DataSet ds = new DataSet();
Sql_Da.Fill(ds);

dv = ds.Tables[0].DefaultView;
// 父级ID
dv.RowFilter = "ParentId=" + parentId ;
foreach(DataRowView drv in dv)
{
tmpNd = new Microsoft.Web.UI.WebControls.TreeNode(); tmpNd.CheckBox = false;
tmpNd.Expanded = true;
tmpNd.Checked = false;

tmpNd.ID = drv["id"].ToString();
tmpNd.Text = drv["ParentName"].ToString();
//tmpNd.ImageUrl="../images/Tree/"+drv["Img_url"].ToString();
tmpNd.Target = "Description";
nds.Add(tmpNd);
InitTreeView(tmpNd.Nodes,int.Parse(tmpNd.ID));
}
}
private void Page_Load(object sender, System.EventArgs e)
{
if( !IsPostBack )
{
TreeView1.Nodes.Clear();
TreeNode tn = new TreeNode();
tn.Text = "TreeView";
tn.ID = "0";
//tn.ImageUrl = "../images/Tree/Desktop.gif";
TreeView1.Nodes.Add(tn);
InitTreeView(tn.Nodes, 0);
}
}

解决方案 »

  1.   

    要判断是否是跟节点!
    foreach (DataRowView row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                { //添加根节点
                    if (row["MENU_DELETE"].ToString() == "1")//如果标记删除那么是红色
                    {
                        Node.Text = "<font color='red'>" + row["MENU"].ToString() + "</font>";
                        Node.ToolTip = "此目录已标记删除";
                    }
                    else
                    {
                        Node.Text = row["MENU"].ToString();
                    }
                    Node.Expanded = true;
                    Node.Value = row["MENU_ID"].ToString();
                    //Node.PopulateOnDemand = true;
                    menuTR.Nodes.Add(Node);//注意这是添加节点                
                    AddTree(row["MENU_ID"].ToString(), Node);//再次递归 
                }
                else
                {
                    if (row["MENU_DELETE"].ToString() == "1")
                    {
                        Node.Text = "<font color='red'>" + row["MENU"].ToString() + "</font>";
                        Node.ToolTip = "此目录已标记删除";
                    }
                    else 
                    {
                        Node.Text = row["MENU"].ToString();
                    }
                    Node.Value = row["MENU_ID"].ToString();
                    //Node.PopulateOnDemand = true;                
                    pNode.ChildNodes.Add(Node);//注意这句和根节点的区别
                    AddTree(row["MENU_ID"].ToString(), Node);//再次递归 
                }
            }
      

  2.   

    完整代码
     void AddTree(string ParentID,TreeNode pNode)//递归节点
        {
            DataSet treeDs = (DataSet)this.ViewState["ds"];
            DataView dvTree = new DataView(treeDs.Tables[0]);
            //过滤ParentID,得到当前的所有子节点
            dvTree.RowFilter = "[MENU_P]='" + ParentID.ToString()+"'";         
            foreach (DataRowView row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                { //添加根节点
                    if (row["MENU_DELETE"].ToString() == "1")//如果标记删除那么是红色
                    {
                        Node.Text = "<font color='red'>" + row["MENU"].ToString() + "</font>";
                        Node.ToolTip = "此目录已标记删除";
                    }
                    else
                    {
                        Node.Text = row["MENU"].ToString();
                    }
                    Node.Expanded = true;
                    Node.Value = row["MENU_ID"].ToString();
                    //Node.PopulateOnDemand = true;
                    menuTR.Nodes.Add(Node);                
                    AddTree(row["MENU_ID"].ToString(), Node);//再次递归 
                }
                else
                {
                    if (row["MENU_DELETE"].ToString() == "1")
                    {
                        Node.Text = "<font color='red'>" + row["MENU"].ToString() + "</font>";
                        Node.ToolTip = "此目录已标记删除";
                    }
                    else 
                    {
                        Node.Text = row["MENU"].ToString();
                    }
                    Node.Value = row["MENU_ID"].ToString();
                    //Node.PopulateOnDemand = true;                
                    pNode.ChildNodes.Add(Node);
                    AddTree(row["MENU_ID"].ToString(), Node);//再次递归 
                }
            }               
        }page load
    {
    if(!ispost--)
    {
    AddTree("0", null);//"0"这里用的是字符型,你也可以换成int,别忘了把void AddTree(string ParentID,TreeNode pNode)更改成int ParentID}
    }