/** * 初始化树型控件,并填充数据 **/ public void initTree(TreeNodeCollection nds,int AddressParentID) { DataView dv = new DataView(); dv.Table = ds.Tables["address"]; TreeNode tmp = null; int strId = 0; dv.RowFilter = "AddressParentID='"+AddressParentID+"'";
foreach(DataRowView drv in dv) { tmp = new TreeNode(); strId = int.Parse(drv["AddressID"].ToString()); tmp.Text = drv["Address"].ToString(); nds.Add(tmp);
initTree(nds[nds.Count - 1].Nodes,strId); } }
give you a example ,if you have a dataset contains columns id , name , parent_id,you can do like this : #region CreateTree /// <summary> /// Create a tree by given root node from a dataset , if the dataset doesn't contains the id , it will throw a ISDException /// </summary> /// <param name="oDsNodes">Source DataSet contains columns id , name , parent_id</param> /// <param name="nID">The root of the tree</param> /// <returns></returns> public string CreateTree(DataSet oDsNodes , int nID) { string sReturn = "<Node ID='" + nID.ToString(); string sTemp = ""; bool bExsit = false; for(int i = 0 ; i < oDsNodes.Tables[0].Rows.Count ; i++) { int nParentID = int.Parse(oDsNodes.Tables[0].Rows[i]["PARENT_ID"].ToString()); int nTempID = int.Parse(oDsNodes.Tables[0].Rows[i]["ID"].ToString()); if(nID == nParentID) { sTemp+= CreateTree(oDsNodes , nTempID); } if(nID == nTempID) { string sTempName = oDsNodes.Tables[0].Rows[i]["NAME"].ToString().Trim(); sReturn += "' Name='" + sTempName + "'>"; bExsit = true; } } if(!bExsit) { throw new ISDException("Can not found this node"); } sReturn += sTemp + "</Node>"; return sReturn; } #endregion
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 .OleDb; using Microsoft.Web.UI.WebControls; using System.Configuration ; using System.Text.RegularExpressions ; namespace ydmis_ls_web { /// <summary> /// left 的摘要说明。 /// </summary> public class left : System.Web.UI.Page { protected Microsoft.Web.UI.WebControls.TreeView TreeView1; public System.Data.OleDb.OleDbConnection oleDbConnection1;
using System; using System.Drawing; using System.Collections; using System.ComponentModel; 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; using System.Data.SqlClient; namespace ElearningEng { public class NodeInfo { public string NodeID; ///...更多的属性定义 public NodeInfo() { } } public class Tree { public static void GenerateTree(DataTable dt,string id,string parentid,string name,ref TreeView tv) { Hashtable ht = new Hashtable(); int iCount = dt.Rows.Count; DataRow dr; NodeInfo nodeInfo; string [] keyArray = new string[iCount];//保存哈西表中的键值 //创建所有树节点,保存在哈西表中 for(int i=0;i<iCount;i++) {
nodeInfo = new NodeInfo(); dr = dt.Rows[i]; nodeInfo.NodeID = dr[id].ToString(); keyArray[i] = nodeInfo.NodeID; TreeNode tn = new TreeNode (); //创建节点 tn.ID= dr[id].ToString(); tn.Text= dr[name].ToString();
Dim node1 As New TreeNode
node = New TreeNode
node.ImageUrl = "../images/treeimage/xttb/Apple Folder 9.gif"
node.Text = "父节点"
node.NavigateUrl = "menutr.aspx"
TreeView1.Nodes.Add(node)
'添加子节点
node1 = New TreeNode
node1.Text = "子节点" node1.Target = "main1"
node1.ImageUrl = "../images/treeimage/sjtb/arrow.gif"
node1.SelectedImageUrl = "../images/treeimage/sjtb/arrow1.gif"
node1.NavigateUrl = "../project/Model_List.aspx?proj_code=" & proj_code & ""
node.Nodes.Add(node1)
谢谢大家,有C#的好代码吗
我好揭贴啊
{
DataView dv=new DataView() ;
TreeNode tmpNd;
int strId;
dv.Table = objDataSet.Tables["TREE_INFO"];
dv.RowFilter = "PARENTID='" + parentId + "'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
strId=(int)objRow["NODEID"];
tmpNd.ID=strId.ToString();
tmpNd.Text=objRow["MAPCNNAME"].ToString();
tmpNd.ExpandedImageUrl ="images/"+objRow["ImgEx"].ToString();
tmpNd.ImageUrl="images/"+objRow["Img"].ToString() ;
tmpNd.NodeData=objRow["DATASET_ID"].ToString();
if(objRow["DATASET_ID"].ToString()!="") tmpNd.NavigateUrl ="javascript:NodeClick('"+tmpNd.Text+"','"+tmpNd.NodeData+"');";
Nds.Add(tmpNd);
intiTree(Nds[Nds.Count-1].Nodes,strId);
}
}
private void CreateDataSet()
{
SqlConnection dbconn=new SqlConnection(MyConnectString);
string strSql ="select * from TREE_INFO";
DataSet objDataSet=new DataSet();
SqlDataAdapter MyAdapter=new SqlDataAdapter(strSql,myConnection);
MyAdapter.Fill(ds,"Authors");
objDataSet=dbconn.CreateDataSet(strSql,"TREE_INFO");
dbconn.CloseConn();
}
/// <summary>
/// 递归生成树
/// </summary>
/// <param name="Tnc">树节点</param>
/// <param name="ParentID">父id</param>
private void InitTree(TreeNodeCollection Tnc,string ParentID)
{
DataView dv=new DataView();
TreeNode tmpNode;
dv.Table=dSet.Tables[0];
dv.RowFilter="ParentFolderID='" + ParentID + "'";
foreach(DataRowView drv in dv)
{
tmpNode=new TreeNode();
tmpNode.ID=drv["FolderID"].ToString().Trim();
tmpNode.Text=drv["FolderName"].ToString().Trim();
tmpNode.Target="right";
tmpNode.ImageUrl="../images/Folder.gif";
tmpNode.NavigateUrl="MailRecord.aspx?FolderID=" + tmpNode.ID.Trim();//传递节点的id(文件夹id)
tmpNode.Expanded=false;
Tnc.Add(tmpNode);
InitTree(tmpNode.Nodes,tmpNode.ID);
}
}
#endregion
我的原代码,自己参考改改.
* 初始化树型控件,并填充数据
**/
public void initTree(TreeNodeCollection nds,int AddressParentID)
{
DataView dv = new DataView();
dv.Table = ds.Tables["address"]; TreeNode tmp = null;
int strId = 0; dv.RowFilter = "AddressParentID='"+AddressParentID+"'";
foreach(DataRowView drv in dv)
{
tmp = new TreeNode();
strId = int.Parse(drv["AddressID"].ToString());
tmp.Text = drv["Address"].ToString();
nds.Add(tmp);
initTree(nds[nds.Count - 1].Nodes,strId);
}
}
#region CreateTree
/// <summary>
/// Create a tree by given root node from a dataset , if the dataset doesn't contains the id , it will throw a ISDException
/// </summary>
/// <param name="oDsNodes">Source DataSet contains columns id , name , parent_id</param>
/// <param name="nID">The root of the tree</param>
/// <returns></returns>
public string CreateTree(DataSet oDsNodes , int nID)
{
string sReturn = "<Node ID='" + nID.ToString();
string sTemp = "";
bool bExsit = false;
for(int i = 0 ; i < oDsNodes.Tables[0].Rows.Count ; i++)
{
int nParentID = int.Parse(oDsNodes.Tables[0].Rows[i]["PARENT_ID"].ToString());
int nTempID = int.Parse(oDsNodes.Tables[0].Rows[i]["ID"].ToString());
if(nID == nParentID)
{
sTemp+= CreateTree(oDsNodes , nTempID);
}
if(nID == nTempID)
{
string sTempName = oDsNodes.Tables[0].Rows[i]["NAME"].ToString().Trim();
sReturn += "' Name='" + sTempName + "'>";
bExsit = true;
}
}
if(!bExsit)
{
throw new ISDException("Can not found this node");
}
sReturn += sTemp + "</Node>";
return sReturn;
}
#endregion
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 .OleDb;
using Microsoft.Web.UI.WebControls;
using System.Configuration ;
using System.Text.RegularExpressions ;
namespace ydmis_ls_web
{
/// <summary>
/// left 的摘要说明。
/// </summary>
public class left : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
public System.Data.OleDb.OleDbConnection oleDbConnection1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex != event.newTreeNodeIndex) \n" + "this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n" + "window.setTimeout('" + strRef.Replace("'","\\'") + "', 0, 'JavaScript'); \n" + " } \n" + " } \n" + "// --> \n" + "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript ); if (!Page.IsPostBack)
{
this.oleDbConnection1=new OleDbConnection( ConfigurationSettings.AppSettings.GetValues(0)[0]); oleDbConnection1.Open ();
TreeNode node=new TreeNode();
TreeView1.Nodes.Add(ShowAllTree(0, oleDbConnection1,node)); //根节是以PID为0标志的 }
} private TreeNode ShowAllTree(int ddd ,OleDbConnection oleDbConnection1,Microsoft.Web.UI.WebControls.TreeNode node)
{
string sqlSelect =
"SELECT id_,id_c,name_ FROM asp_tree where id_='"+ddd+"'" ;
OleDbDataAdapter da = new OleDbDataAdapter(sqlSelect, oleDbConnection1);
DataTable dt=new DataTable();
da.Fill(dt);
for(int i=0;i<dt.Rows.Count;i++)
{
TreeNode newNode=new TreeNode();
DataRow dr=dt.Rows[i];
newNode.Text="<font color=#ffffff >"+ dr["name_"].ToString()+"</font>"; // newNode.Text=dr["name_"].ToString ();
newNode.ImageUrl="Images/283.gif";
node.Nodes.Add(newNode); int newID = Convert.ToInt32 (dt.Rows[i][1]);; ShowAllTree(newID,this.oleDbConnection1 ,newNode); //递归调用,将子结点ID当做下一当前结点ID }
dt.Dispose();
return node;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.TreeView1.SelectedIndexChange += new Microsoft.Web.UI.WebControls.SelectEventHandler(this.TreeView1_SelectedIndexChange);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
//this.TreeView1.AutoPostBack=true;
string temp=(this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex)).Text ; if (System.Text.RegularExpressions.Regex.Replace(temp,@"[NUL -~ ]","")=="国内大事")
{
Response.Write("<script>parent.frames.item('mainFrame').location='WebForm3.aspx'</script>");
//this.TreeView1.AutoPostBack=false;
}
System.Text.RegularExpressions.Regex.Replace(temp,@"[NUL -~ ]","");// 用正则表达式反回汉字
} }
}
/// <summary>
/// 递归生成树
/// </summary>
/// <param name="Tnc">树节点</param>
/// <param name="ParentID">父id</param>
private void InitTree(TreeNodeCollection Tnc,string ParentID)
{
DataView dv=new DataView();
TreeNode tmpNode;
dv.Table=dSet.Tables[0];
dv.RowFilter="ParentFolderID='" + ParentID + "'";
foreach(DataRowView drv in dv)
{
tmpNode=new TreeNode();
tmpNode.ID=drv["FolderID"].ToString().Trim();
tmpNode.Text=drv["FolderName"].ToString().Trim();
tmpNode.Target="right";
tmpNode.ImageUrl="../images/Folder.gif";
tmpNode.NavigateUrl="MailRecord.aspx?FolderID=" + tmpNode.ID.Trim();//传递节点的id(文件夹id)
tmpNode.Expanded=false;
Tnc.Add(tmpNode);
InitTree(tmpNode.Nodes,tmpNode.ID);
}
}
#endregion
using System.Drawing;
using System.Collections;
using System.ComponentModel;
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;
using System.Data.SqlClient; namespace ElearningEng
{
public class NodeInfo
{
public string NodeID;
///...更多的属性定义
public NodeInfo()
{
}
} public class Tree
{
public static void GenerateTree(DataTable dt,string id,string parentid,string name,ref TreeView tv)
{
Hashtable ht = new Hashtable();
int iCount = dt.Rows.Count;
DataRow dr;
NodeInfo nodeInfo;
string [] keyArray = new string[iCount];//保存哈西表中的键值
//创建所有树节点,保存在哈西表中
for(int i=0;i<iCount;i++)
{
nodeInfo = new NodeInfo(); dr = dt.Rows[i];
nodeInfo.NodeID = dr[id].ToString();
keyArray[i] = nodeInfo.NodeID;
TreeNode tn = new TreeNode (); //创建节点
tn.ID= dr[id].ToString();
tn.Text= dr[name].ToString();
// try
// {
// tn.NavigateUrl=dr["savepath"].ToString();
// tn.Target="_blank";
// tn.NodeData= dr[parentid].ToString();
// }
// catch
// {
tn.NodeData= dr[parentid].ToString();
// } ht.Add(nodeInfo.NodeID,tn);
}
//建立节点关系,并将根节点加入到TreeView中
for(int i=0;i<iCount;i++)
{
TreeNode tn = (TreeNode)ht[keyArray[i]];
if(tn.NodeData == null || tn.NodeData == "") tv.Nodes.Add(tn);//这是根节点
else //这是子节点
{
TreeNode tnd1 = (TreeNode)ht[tn.NodeData];//找父节点对象,注意:可能找不到父节点对象
if(tnd1!=null)
tnd1.Nodes.Add(tn);//找到父节点:把该节点加到父节点的子节点列表中
else
{
//未找到父节点:或把它设为根节点,或抛弃,你看着办了
tv.Nodes.Add(tn); //设为根节点
}
}
}
}
public static void GeneratecheckTree(DataTable dt,string id,string parentid,string name,ref TreeView tv)
{
Hashtable ht = new Hashtable();
int iCount = dt.Rows.Count;
DataRow dr;
NodeInfo nodeInfo;
string [] keyArray = new string[iCount];//保存哈西表中的键值
//创建所有树节点,保存在哈西表中
for(int i=0;i<iCount;i++)
{
nodeInfo = new NodeInfo();
dr = dt.Rows[i];
nodeInfo.NodeID = dr[id].ToString();
keyArray[i] = nodeInfo.NodeID;
TreeNode tn = new TreeNode (); //创建节点
tn.ID= dr[id].ToString();
tn.Text= dr[name].ToString();
// try
// {
// tn.NavigateUrl=dr["savepath"].ToString();
// tn.Target="_blank";
// tn.NodeData= dr[parentid].ToString();
// }
// catch
// {
tn.NodeData= dr[parentid].ToString();
// } ht.Add(nodeInfo.NodeID,tn);
}
//建立节点关系,并将根节点加入到TreeView中
for(int i=0;i<iCount;i++)
{
TreeNode tn = (TreeNode)ht[keyArray[i]];
tn.CheckBox=true;
if(tn.NodeData == null || tn.NodeData == "") tv.Nodes.Add(tn);//这是根节点
else //这是子节点
{
TreeNode tnd1 = (TreeNode)ht[tn.NodeData];//找父节点对象,注意:可能找不到父节点对象
if(tnd1!=null)
tnd1.Nodes.Add(tn);//找到父节点:把该节点加到父节点的子节点列表中
else
{
//未找到父节点:或把它设为根节点,或抛弃,你看着办了
//tv.Nodes.Add(tn); //设为根节点
}
}
}
}
//自
public static void GenerateSubTree(DataTable dt,TreeNode tnCurrent,string id,string parentid,string name,ref TreeView tv)
{
Hashtable ht = new Hashtable();
int iCount = dt.Rows.Count;
DataRow dr;
NodeInfo NodeInfo1;
string [] keyArray = new string[iCount];//保存哈西表中的键值
//创建所有树节点,保存在哈西表中
for(int i=0;i<iCount;i++)
{
NodeInfo1 = new NodeInfo();
dr = dt.Rows[i];
NodeInfo1.NodeID = dr[id].ToString();
keyArray[i] = NodeInfo1.NodeID;
TreeNode tn = new TreeNode (); //创建节点
tn.ID= dr[id].ToString();
tn.Text= dr[name].ToString();
tn.NodeData= dr[parentid].ToString();
ht.Add(NodeInfo1.NodeID,tn);
}
//建立节点关系,节点加入到TreeView中
for(int i=0;i<iCount;i++)
{
TreeNode tn = (TreeNode)ht[keyArray[i]];
tn.Type ="1";
TreeNode tnd1 = (TreeNode)ht[tn.NodeData];//找父节点对象,注意:可能找不到父节点对象
if(tnd1!=null)
tnd1.Nodes.Add(tn);//找到父节点:把该节点加到父节点的子节点列表中
else
{
tnCurrent.Nodes.Add(tn);
//在原结点添加结点
}
}
}
}
}