treeview控件如何动态添加节点

terencegan 2005-01-19 10:59:08
请教各位老师,小弟用vc#.net做asp.net项目。用到了微软公司的treeview控件 。
我已经在webform上添加了一个treeview控件。

我需要动态给treeview控件添加根节点和若干向下的节点。

添加的内容如下,
根节点的text为中国,一级子节点的text分别为省份名字,如北京 河北 江苏等30几个,二级子节点为省份对应的城市名字,如河北 对应 石家庄 、保定、秦皇岛、唐山等等。

如何实现呢,请高人指点迷津,谢谢!
...全文
752 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
morality 2005-01-21
  • 打赏
  • 举报
回复
给你一段代码参考:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
using Microsoft.Web.UI.WebControls;

namespace NCMT
{
/// <summary>
/// NavigationIn 的摘要说明。
/// </summary>
public class NavigationIn : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView tvwNaviIn;

protected SqlConnection conn;
protected SqlDataAdapter apt;
protected DataSet ds;
protected string strSql;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
if(Session["UserID"] == null || Session["UserID"].ToString() == "" || Session["UserID"].ToString() == String.Empty)
{
Response.Write("<script language=javascript>window.top.location.href='../login.aspx'</script>");
}

string sConn = ConfigurationSettings.AppSettings["NCMT"];
conn = new SqlConnection(sConn);

CreateDataSet();
InitNavigationTree(tvwNaviIn.Nodes,"0");
}
}


//创建数据集
private DataSet CreateDataSet()
{
strSql = "Select Distinct a.ID,a.F_NodeID,a.F_NodeName,a.F_ParentID,a.F_NavigateUrl,a.F_ImageUrl,a.F_OutOrIn From T_Function a,T_Role b,T_UserToRole c,T_RoleToFunc d Where c.F_UserID = '" + Session["UserID"].ToString() + "' And b.F_RoleID = c.F_RoleID And b.F_RoleID = d.F_RoleID And a.F_NodeID = d.F_FuncID Order By a.ID";

apt = new SqlDataAdapter(strSql,conn);
ds = new DataSet();
apt.Fill(ds,"dtNavigateIn");
return ds;
}

//初始化导航树,通过递归调用显示子树
private void InitNavigationTree(TreeNodeCollection tncCurrent,string sParentID)
{
DataView dvw = new DataView();
TreeNode nodTemp;
string strTempID;
dvw.Table = ds.Tables["dtNavigateIn"];
dvw.RowFilter = "F_ParentID = '" + sParentID + "'";
foreach(DataRowView drv in dvw)
{
nodTemp = new TreeNode();
nodTemp.ID = drv["F_NodeID"].ToString();
nodTemp.Text = drv["F_NodeName"].ToString();
nodTemp.NavigateUrl = drv["F_NavigateUrl"].ToString();
nodTemp.ImageUrl = drv["F_ImageUrl"].ToString();
nodTemp.Target = "MainIn";

tncCurrent.Add(nodTemp);
strTempID = drv["F_ParentID"].ToString();
//递归调用
InitNavigationTree(nodTemp.Nodes,nodTemp.ID);
}
}


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
falcon36017 2005-01-21
  • 打赏
  • 举报
回复
终于看明白拉 感谢各位
fangyifeng 2005-01-20
  • 打赏
  • 举报
回复
在node节点下加nodei节点
ComponentArt.Web.UI.TreeViewNode nodeI = new ComponentArt.Web.UI.TreeViewNode();
nodeI.Text = ds.Tables[0].Rows[i]["uName"].ToString();//我取的是数据库中的内容,自己修改
nodeI.Value = ds.Tables[0].Rows[i]["uId"].ToString();
nodeI.Indent = 1;
nodeI.ImageUrl = "yh.gif";
nodeI.ShowCheckBox = true;
node.Nodes.Add(nodeI);
简单明了
nobody123 2005-01-19
  • 打赏
  • 举报
回复
方法:读取SQL-SERVER中的tbTree的信息,递归产生树形结构。(表结构,ID,ParentID,Context,url)

代码:

protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

private void Page_Load(object sender, System.EventArgs e)
{

// 定义数据库连接


SqlConnection CN = new SqlConnection();

CN.ConnectionString="data source=pmserver;initial catalog=Benchmark;persist security info=False;user id=sa;Password=sa;";



try
{
//初始化连接字符串
CN.ConnectionString="data source=pmserver;initial catalog=Benchmark;persist security info=False;user id=sa;Password=sa;";

CN.Open();

SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
DataSet ds=new DataSet();
adp.Fill(ds);
this.ViewState["ds"]=ds;
}
catch (Exception ex)
{
Session["Error"] = ex.ToString();
Response.Redirect("error.aspx"); //跳转程序的公共错误处理页面
}
finally
{
CN.Close();
}
//调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null);

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

//递归添加树的节点
public void AddTree(int ParentID,TreeNode pNode)
{
DataSet ds=(DataSet) this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTID] = " + ParentID;

foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{ //添加根节点
Node.Text = Row["Context"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded=true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["Context"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
}
}
}


}
weixing979 2005-01-19
  • 打赏
  • 举报
回复
就是用TreeNode
zhangfire 2005-01-19
  • 打赏
  • 举报
回复
TreeNode node = new TreeNode();
node.Text="your text";
this.TreeView1.Nodes.Add(node);

TreeNode node1 = new TreeNode();
this.TreeView1.Nodes[0].Nodes.Add(node1);

这个例子够清楚直接了吧。
Good luck!
falcon36017 2005-01-19
  • 打赏
  • 举报
回复
按照这个递归好象会产生没有下级的行无法显示?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧