我想从一个数据表读出数据用 treeview 来显示。其中有三个数据表,字段如下
++++++++++++++++++++++++++++++++++++++++
数据库名“新闻大类”,字段如下:
ID 大类名
-------------------------------------
数据库名“新闻二类”,字段如下。 ID 大类名 二类名
--------------------------------------
数据库名“新闻三类”,字段如下。 ID 大类名 二类名 三类名
-------------------------------------结构如下:
根节点---------->邦定"新闻大类数据表"的“大类名”字段并把“大类名”传值给二级节点。
二级节点----->邦定“新闻二类”的“二类名”字段 且 “大类名”字段=传过来的值
二级节点
........
三级节点
三级节点
........
根节点
二级节点
二级节点
........
三级节点
三级节点
........
++++++++++++++++++++++++++++++++++++++++
数据库名“新闻大类”,字段如下:
ID 大类名
-------------------------------------
数据库名“新闻二类”,字段如下。 ID 大类名 二类名
--------------------------------------
数据库名“新闻三类”,字段如下。 ID 大类名 二类名 三类名
-------------------------------------结构如下:
根节点---------->邦定"新闻大类数据表"的“大类名”字段并把“大类名”传值给二级节点。
二级节点----->邦定“新闻二类”的“二类名”字段 且 “大类名”字段=传过来的值
二级节点
........
三级节点
三级节点
........
根节点
二级节点
二级节点
........
三级节点
三级节点
........
解决方案 »
- TextBox能接收条码扫描仪数据吗?
- 关于显示多级分类的问题
- 简单问题:有关DataGrid,请大家不吝赐教。
- [总结]发送邮件共有几种方法,谁有测试成功的例子 200分
- 谁能解释一下:TextBox的属性EnableViewState为true和false时的区别?怎么我都试了,可看不出来啊!
- Visual studio 2012中不能查看数据库表
- asp.net用了母版之后怎么接收FORM表单?
- 向另一个页面传参数,都用什么方法?
- 怎样控制服务器控件LABEL中的字符的对齐方式居左或居右?
- 各位大侠:我现在有一个树型结构表(F_ID,F_ParentID,F_Name,F_IsTip),怎么样根据不是末级F_ID取得以该ID为父ID或父父ID或...的所有末级F
- 如何在运行"web安装项目"的时候安装另外的exe/msi文件?
- 一个工程调用另一个工程中的类失败???
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;namespace LunTan
{
/// <summary>
/// treeView 的摘要说明。
/// </summary>
public class treeView : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
private string source="server=BILLGATES;uid=sa;pwd=;database=LunTan";
private string select="";
private void Page_Load(object sender, System.EventArgs e)
{
select="SELECT * From tree_Ta";
SqlConnection conn=new SqlConnection(source);
SqlDataAdapter cmd=new SqlDataAdapter(select,source);
DataSet ds=new DataSet();
cmd.Fill(ds,"tree_Ta");
this.ViewState["ds"] = ds;
addNode(0,null);
}
//注意,必须用viewstate保存状态? private void addNode(int parentId,TreeNode parentNode)
{
DataSet ds = (DataSet)this.ViewState["ds"];
DataView dv = new DataView(ds.Tables["tree_Ta"]);
dv.RowFilter = "[parentid] = " + parentId;
foreach(DataRowView Row in dv)
{
if(parentId==0)
{
TreeNode node=new TreeNode();
node.ID=Row["nodeid"].ToString();
node.Text=Row["nodetext"].ToString();
string text=Row["nodetext"].ToString();
string idd=Row["nodeid"].ToString();
TreeView1.Nodes.Add(node);
node.Expanded=true;
addNode(int.Parse(node.ID),node);
}
else
{
TreeNode node=new TreeNode();
node.ID=Row["nodeid"].ToString();
node.Text=Row["nodetext"].ToString();
string text=Row["nodetext"].ToString();
string idd=Row["nodeid"].ToString();
parentNode.Nodes.Add(node);
node.Expanded=true;
addNode(int.Parse(node.ID),node);
}
}
}
// private void addChildNode(TreeNode parentNode)
// {
// select="SELECT bbsid,bbsdetails FROM bbs_Ta WHERE titleId="+int.Parse(parentId);
// SqlConnection conn=new SqlConnection(source);
// conn.Open();
// SqlCommand cmd2=new SqlCommand(select,conn);
// SqlDataReader dr=cmd2.ExecuteReader();
//
// while(dr.Read())
// {
// TreeNode node=new TreeNode();
// node.ID=dr.GetInt32(0).ToString();
// node.Text=dr.GetString(1);
// node.Expanded=true;
// parentNode.Nodes.Add(node);
//
// }
//
// }
#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
}
}
下面示例 大类表 table1 二类 table2 三类 table3
for (int i=0;i<table1.Rows.Count;i++)
{
TreeNode myNoteTp=new TreeNode();
string value = myDvTemp[i]["value"];
myNoteTp.Text = value;
myNoteTp.Target="WZL_ZLK";//右边框架名称
myNoteTp.NavigateUrl = "target.aspx?id="+value; //链接路径,传入参数
ParNode.Nodes.Add(myNoteTp);
}
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 -~ ]","");// 用正则表达式反回汉字
} }
}
嵌套三层循环不就可以啦,
下面示例 大类表 table1 二类 table2 三类 table3
//首先查询出大类表 table1
for (int i=0;i<table1.Rows.Count;i++)
{
TreeNode level1 = new TreeNode();
string name1 = table1[i]["名称"];
level1.Text = value;
level1.NavigateUrl = "target.aspx?name="+name1; //链接路径,传入参数
//根据name1 查询出二类表中的子类 table2
for (int i=0;i<table2.Rows.Count;i++)
{
TreeNode level2 = new TreeNode();
string name2 = table1[i]["名称"];
level2.Text = value;
level2.NavigateUrl = "target.aspx?name="+name1;
level1.Nodes.Add(level2); //添加第二层节点
//根据name2 查询出三类表中的子类 table3
for (int i=0;i<table3.Rows.Count;i++)
{
TreeNode level3 = new TreeNode();
string name3 = table1[i]["名称"];
level3.Text = value;
level3.NavigateUrl = "target.aspx?name="+name1;
level2.Nodes.Add(level3); //添加第三层节点
}
}
TreeView1.Nodes.Add(level1); //添加第一层节点
}
-----------------------------------------------
level3.Text = name3;
level3.NavigateUrl = "target.aspx?name="+name3;
-----------------------------------------------
level1 和level2 中也错了~ faint