如何使用动态treeview啊? 请教各位,我想动态的使用treeview,不知如何使用!谢谢~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public void ShowTreeView(int SelfID,TreeNode node) { DataSet myDataSet=new DataAccess.Nodes().SelectAllNodes(); DataView dv = myDataSet.Tables[0].DefaultView; dv.RowFilter = "FatherID=" + SelfID.ToString(); TreeNode item; foreach (DataRowView dr in dv) { if (node == null) { item = new TreeNode(); item.Text=dr["NodeTitle"].ToString(); treeView1.Nodes.Add(item); ShowTreeView(Convert.ToInt32(dr["SelfID"]), item); } else { item = new TreeNode(); item.Text=dr["NodeTitle"].ToString(); node.Nodes.Add(item); ShowTreeView(Convert.ToInt32(dr["SelfID"]), item); } } } 采用foreach的遍历加递归就可以实现搂住的要求! 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 Microsoft.Web.UI.WebControls;using System.Data.SqlClient;using System.Configuration;namespace test{/// <summary>/// tree1 的摘要说明。/// </summary>public class tree1 : System.Web.UI.Page{protected Microsoft.Web.UI.WebControls.TreeView TreeView1;protected DataSet ds = new DataSet(); protected SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);protected string j_id;private void Page_Load(object sender, System.EventArgs e){if (!this.IsPostBack){//if (Session["sid"] != null)//{//j_id=Session["sid"].ToString(); // 获得用户CreateDataSet();CreateTree(this.TreeView1.Nodes,"");//}//else//{//Response.Write("<font color=red>没有找到要下载的文件</font>");//}}// 在此处放置用户代码以初始化页面}private void CreateDataSet(){ string strSql = " select * from q_Func, q_rolet_Func where q_rolet_Func.role_id=(select roleid from q_consumer_role where userid=12 ) and q_Func.Func_id=q_rolet_Func.Func_id";conn.Open();SqlDataAdapter myAdapter = new SqlDataAdapter(strSql,conn);myAdapter.Fill(ds,"subTree");conn.Close();}private void CreateTree(Microsoft.Web.UI.WebControls.TreeNodeCollection TNCs,string strParentId){Microsoft.Web.UI.WebControls.TreeNode tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();DataView dv = new DataView();dv.Table = ds.Tables[0];string strID;if (strParentId == ""){dv.RowFilter = "tree_ID is null";}else{dv.RowFilter = "tree_ID = "+strParentId;}foreach (DataRowView drv in dv){tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();//定义结点strID = drv["func_id"].ToString();tmpTNCs.ID = strID;//定义结点IDtmpTNCs.Text = drv["NodeName"].ToString();//定义结点文字tmpTNCs.ImageUrl = "img/close.gif";//定义图片tmpTNCs.ExpandedImageUrl = "img/open.gif";//定义打开的图片if (strParentId == ""){tmpTNCs.NavigateUrl= null;tmpTNCs.Target= null;}else{tmpTNCs.NavigateUrl = drv["http_view"].ToString().Trim();tmpTNCs.Target = "main";}//tmpTNCs.NavigateUrl = "main.aspx?ID="+strID+"&ParentID="+drv["ParentID"].ToString();//定义结点联接TNCs.Add(tmpTNCs);//添加结点CreateTree(TNCs[TNCs.Count-1].Nodes,strID);//递归调用//选定某个结点if (Request.Params["id"]!=null){if (strID == Request.Params["Id"].ToString()){//将选定结点的所有上级结点的Expanded属性全设为true,即展开结点string strNodeIndex = TNCs[TNCs.Count-1].GetNodeIndex();string[] strExpandLevel = strNodeIndex.Split('.');Microsoft.Web.UI.WebControls.TreeNode TN = this.TreeView1.Nodes[int.Parse(strExpandLevel[0])];TN.Expanded = true;for (int i=1;i<strExpandLevel.Length;i++){int ii = int.Parse(strExpandLevel[i]);TN = TN.Nodes[ii];TN.Expanded = true;}//选定结点this.TreeView1.SelectedNodeIndex = strNodeIndex;}}}}#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}}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){string sConn = ConfigurationSettings.AppSettings["NCMT"];conn = new SqlConnection(sConn);CreateDataSet();InitNavigationTree(tvwNaviIn.Nodes,"0");}}//创建数据集private DataSet CreateDataSet(){strSql = "Select Distinct ID,F_NodeID,F_NodeName,F_ParentID,F_NavigateUrl,F_ImageUrl From T_Function Where 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);}}第三种方法int PreIDLength=0;TreeNode PreNode=new TreeNode();dataTable1.DefaultView.Sort="degree";treeView1.Nodes.Add(PreNode);for(int i=0;i<dataTable1.Rows.Count;i++){ TreeNode trnAdd=new TreeNode(); trnAdd.Text=dataTable1.DefaultView[i]["name"].ToString().Trim(); int IDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length; for(int j=0;j<=(PreIDLength-IDLength)/2;j++) { PreNode=PreNode.Parent; } PreNode.Nodes.Add(trnAdd); PreIDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length; PreNode=trnAdd;} VS2010 SP1升级后项目里生成的exe文件,RDLC报表钻取功能,在升级之后不能用了 即使重新编译也不行 C#设置系统时间 怎么让程序访问程序上次已修改过的数据 不能在select语句里有变量? 求MVC WINFORM学习实例 如何将2007:11:10 12:11:11转换成2007-11-10 12:11:11 2005自带的ComboBox不是很好 关于软件设计(面向对象)讨论 急 c# 多项目开发时..... 用streamreader显示中文的问题? 急救!如何把字符串转成16进制 疯了,如何在程序中得到水晶报表里的页数啊,无论什么方法都行,真的要疯了
{
DataSet myDataSet=new DataAccess.Nodes().SelectAllNodes();
DataView dv = myDataSet.Tables[0].DefaultView;
dv.RowFilter = "FatherID=" + SelfID.ToString();
TreeNode item;
foreach (DataRowView dr in dv)
{
if (node == null)
{
item = new TreeNode();
item.Text=dr["NodeTitle"].ToString();
treeView1.Nodes.Add(item);
ShowTreeView(Convert.ToInt32(dr["SelfID"]), item);
}
else
{
item = new TreeNode();
item.Text=dr["NodeTitle"].ToString(); node.Nodes.Add(item);
ShowTreeView(Convert.ToInt32(dr["SelfID"]), item);
}
}
}
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 Microsoft.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;namespace test
{
/// <summary>
/// tree1 的摘要说明。
/// </summary>
public class tree1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected DataSet ds = new DataSet();
protected SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
protected string j_id;private void Page_Load(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
{
//if (Session["sid"] != null)
//{
//j_id=Session["sid"].ToString(); // 获得用户
CreateDataSet();
CreateTree(this.TreeView1.Nodes,"");
//}
//else
//{
//Response.Write("<font color=red>没有找到要下载的文件</font>");
//}}
// 在此处放置用户代码以初始化页面
}
private void CreateDataSet()
{ string strSql = " select * from q_Func, q_rolet_Func where q_rolet_Func.role_id=(select roleid from q_consumer_role where userid=12 ) and q_Func.Func_id=q_rolet_Func.Func_id";
conn.Open();
SqlDataAdapter myAdapter = new SqlDataAdapter(strSql,conn);
myAdapter.Fill(ds,"subTree");
conn.Close();
}
private void CreateTree(Microsoft.Web.UI.WebControls.TreeNodeCollection TNCs,string strParentId)
{
Microsoft.Web.UI.WebControls.TreeNode tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();DataView dv = new DataView();
dv.Table = ds.Tables[0];
string strID;
if (strParentId == "")
{
dv.RowFilter = "tree_ID is null";
}
else
{
dv.RowFilter = "tree_ID = "+strParentId;
}
foreach (DataRowView drv in dv)
{
tmpTNCs = new Microsoft.Web.UI.WebControls.TreeNode();//定义结点
strID = drv["func_id"].ToString();
tmpTNCs.ID = strID;//定义结点ID
tmpTNCs.Text = drv["NodeName"].ToString();//定义结点文字
tmpTNCs.ImageUrl = "img/close.gif";//定义图片
tmpTNCs.ExpandedImageUrl = "img/open.gif";//定义打开的图片
if (strParentId == "")
{
tmpTNCs.NavigateUrl= null;
tmpTNCs.Target= null;
}
else
{
tmpTNCs.NavigateUrl = drv["http_view"].ToString().Trim();
tmpTNCs.Target = "main";
}
//tmpTNCs.NavigateUrl = "main.aspx?ID="+strID+"&ParentID="+drv["ParentID"].ToString();//定义结点联接
TNCs.Add(tmpTNCs);//添加结点
CreateTree(TNCs[TNCs.Count-1].Nodes,strID);//递归调用//选定某个结点
if (Request.Params["id"]!=null)
{
if (strID == Request.Params["Id"].ToString())
{
//将选定结点的所有上级结点的Expanded属性全设为true,即展开结点
string strNodeIndex = TNCs[TNCs.Count-1].GetNodeIndex();
string[] strExpandLevel = strNodeIndex.Split('.');
Microsoft.Web.UI.WebControls.TreeNode TN = this.TreeView1.Nodes[int.Parse(strExpandLevel[0])];
TN.Expanded = true;
for (int i=1;i<strExpandLevel.Length;i++)
{
int ii = int.Parse(strExpandLevel[i]);
TN = TN.Nodes[ii];
TN.Expanded = true;
}
//选定结点
this.TreeView1.SelectedNodeIndex = strNodeIndex;
}
}
}
}
#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
}
}
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)
{
string sConn = ConfigurationSettings.AppSettings["NCMT"];
conn = new SqlConnection(sConn);CreateDataSet();
InitNavigationTree(tvwNaviIn.Nodes,"0");
}
}//创建数据集
private DataSet CreateDataSet()
{
strSql = "Select Distinct ID,F_NodeID,F_NodeName,F_ParentID,F_NavigateUrl,F_ImageUrl From T_Function Where 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);
}
}
第三种方法
int PreIDLength=0;
TreeNode PreNode=new TreeNode();
dataTable1.DefaultView.Sort="degree";
treeView1.Nodes.Add(PreNode);
for(int i=0;i<dataTable1.Rows.Count;i++)
{
TreeNode trnAdd=new TreeNode();
trnAdd.Text=dataTable1.DefaultView[i]["name"].ToString().Trim();
int IDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length;
for(int j=0;j<=(PreIDLength-IDLength)/2;j++)
{
PreNode=PreNode.Parent;
}
PreNode.Nodes.Add(trnAdd);
PreIDLength=dataTable1.DefaultView[i]["degree"].ToString().Trim().Length;
PreNode=trnAdd;
}