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;namespace WebApplication1 { /// <summary> /// WebForm1 的摘要说明。 /// </summary> public class WebForm1 : System.Web.UI.Page { protected Microsoft.Web.UI.WebControls.TreeView TreeView;
SqlDataAdapter Adapter = new SqlDataAdapter("SELECT * FROM system_menu where parentid=0","server=localhost;database=treeview;uid=sa;pwd="); DataSet ds = new DataSet (); Adapter.Fill(ds,"system_menu");
DataTable table =ds.Tables[0]; Microsoft.Web.UI.WebControls.TreeNode tempnode = new Microsoft.Web.UI.WebControls.TreeNode(); foreach (DataRow row in table.Rows)
/// <summary>
/// 加载树节点
/// </summary>
private void LoadTreeNode()
{
try
{
treeView.ImageList=this.imageList1;
//加载树节点
LoadTreeView.InitTree(UserParameter.myDataset.Tables["treeNode"],"NodeID","ParentID","NodeName",treeView.Nodes,RootNodeTag);
//加载树节点图片
LoadTreeView.LoadTreeNodeImage(treeView,imageList1,NodeImageMode);
}
catch(Exception de)
{
MessageBox.Show(this,de.Message,"error!",MessageBoxButtons.OK,MessageBoxIcon.Stop);
Application.Exit();
}
}using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.IO;namespace WindowsApplicationModel
{
/// <summary>
/// LoadTreeView 的摘要说明。
/// </summary>
public class myTreeNode:System.Windows.Forms.TreeNode
{
public int ID;
} public class LoadTreeView
{
public System.Windows.Forms.BindingManagerBase myBindView;
private ArrayList treeNode=new ArrayList();
public static bool IsFind=false;
public static ArrayList FindNodeArray=new ArrayList(); public LoadTreeView()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 加载树节点。建树的基本思路是:从根节点开始递归调用显示子树。
/// </summary>
/// <param name="dt">是DataTable类型的保存树节点的数据表</param>
/// <param name="nodeID">数据表中保存节点的列名称</param>
/// <param name="parentID">数据表中保存节点父节点的列名称</param>
/// <param name="nodeName">数据表中保存节点名称的列名称</param>
/// <param name="treeNodeCollection">表示TreeView.Nodes对象的集合</param>
/// <param name="rootNodeTag">定义根节点的父节点的标记</param>
//法一:用DataView
public static void InitTree(DataTable dt,string nodeID,string parentID,string nodeName,TreeNodeCollection treeNodeCollection,string rootNodeTag)
{
try
{
TreeNode tmpNode;
DataView dv=new DataView();
dv.Table=dt;
if (rootNodeTag!=""||rootNodeTag!=null)
dv.RowFilter=parentID+"='"+rootNodeTag+"'";
foreach(DataRowView drv in dv)
{
tmpNode=new TreeNode();
tmpNode.Text=drv[nodeName].ToString();
tmpNode.Tag=drv[nodeID];
string father=drv[nodeID].ToString();
treeNodeCollection.Add(tmpNode);
InitTree(dt,nodeID,parentID,nodeName,tmpNode.Nodes,father);
}
}
catch(Exception te)
{
MessageBox.Show(te.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
} /// <summary>
/// 加载TreeView节点图片。
/// </summary>
/// <param name="treeView">是要加载的TreeView对象</param>
/// <param name="imageList">保存图片的ImageList控件</param>
/// <param name="ShowMode">是节点图标的显示方式:false,以节点的索引找图标,true,以节点的层次深度找图标。</param>
public static void LoadTreeNodeImage(TreeView treeView,ImageList imageList,bool ShowMode)
{
if (imageList.Images.Count==0)
{
treeView.ImageList=null;
return;
}
TreeNodeCollection nodes=treeView.Nodes;
foreach(TreeNode tn in nodes)
{
LoadTreeNodeImage(tn,imageList,ShowMode);
}
} /// <summary>
/// 加载TreeNode图片。
/// </summary>
/// <param name="treeNode">是要加载的TreeNode对象</param>
/// <param name="image">保存图片的ImageList控件</param>
/// <param name="showMode">是节点图标的显示方式:false,以节点的索引找图标,true,以节点的层次深度找图标。</param>
public static void LoadTreeNodeImage(TreeNode treeNode,ImageList image,bool showMode)
{
int level = 0;
if (showMode)
{
string path=treeNode.FullPath;
TreeNode tmpNode=treeNode;
//这句话是:tmpNode为当前节点,tmpNode=tmpNode.Parent是返回到上一层节点,(tmpNode = tmpNode.Parent) != null为即返回到根节点时,刚根节点的parent是null;
while ((tmpNode = tmpNode.Parent) != null) level++;
}
else
level=treeNode.Index;
level = level<image.Images.Count?level:image.Images.Count-1;
treeNode.ImageIndex=level;
treeNode.SelectedImageIndex=level;
foreach(TreeNode tn in treeNode.Nodes)
LoadTreeNodeImage(tn,image,showMode);
}
}
}
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;namespace WebApplication1
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView;
private void Page_Load(object sender, System.EventArgs e)
{
SqlDataAdapter Adapter = new SqlDataAdapter("SELECT * FROM system_menu where parentid=0","server=localhost;database=treeview;uid=sa;pwd=");
DataSet ds = new DataSet ();
Adapter.Fill(ds,"system_menu");
DataTable table =ds.Tables[0];
Microsoft.Web.UI.WebControls.TreeNode tempnode = new Microsoft.Web.UI.WebControls.TreeNode(); foreach (DataRow row in table.Rows)
tempnode.Text = System.Convert.ToString(row["name"]);
1-----//tempnode.ID = System.Convert.ToString(row["ID"]);;
tempnode.CheckBox = true;
tempnode.NavigateUrl= "http://www.sina.com.cn";
this.TreeView.Nodes.Add(tempnode);
2----//Response.Write(row["name"].ToString() + "<br>");
}
就上面的代码,我想把他改成依次把数据集里的数据生成一个树型菜单.
注释1:总是提示"F:\树型菜单\tree_ORACLE\WebApplication1\WebForm1.aspx.cs(37): 名称“row”在类或命名空间“WebApplication1.WebForm1”中不存在"
注释2:用这句能显示全部记录.但用上面的树的代码,确总是只能生成一个,节点.怎么怎么回事?
//从表中读数据准备创建树
private TreeNode readTableToTree()
{
TreeNode rootNode=new TreeNode("FAQ列表");
DictionaryEntry dic=new DictionaryEntry(0,0); //(ID,类别)
rootNode.Tag=dic;
sqlStr="select * from FAQ"; table=ado.exSqlReturnTable(sqlStr);
this.creatTree(ref rootNode,0,ref table);
return rootNode;
}
//创建树
private void creatTree(ref TreeNode root,int parentID,ref DataTable table)
{
DataRow[] rows=table.Select("parentID=" + parentID);
foreach(DataRow row in rows)
{
TreeNode rootNode = new TreeNode((string)row["title"]);
DictionaryEntry dic=new DictionaryEntry(row["ID"],row["type"]);
rootNode.Tag=dic;
if((int)row["type"]==0)
{
rootNode.ImageIndex=0;
}
else
{
rootNode.ImageIndex=2;
}
root.Nodes.Add(rootNode);
this.creatTree(ref rootNode,(int)row["ID"],ref table);
}
}