我觉得可以这样做,先将数据读出来,然后手工往treeview中添
如 TreeNode trnode=null;TreeNode trnode1=null;
trnode=new TreeNode("...");
treeView.Nodes.Add(trnode); //加根结点
for (...);
{ trnode1=new TreeNode("...");
trnode.Add(trnode1); //加子结点
}
treeView.Tag 是一个object,你可以只定义一个类用于存储相关信息,用tag指向它,当点击结点时再在listview中显示不知这样行不行
解决方案 »
- 怎么做月统计的饼图、柱图?
- C#中^符号是什么意思?
- c#图片显示问题
- 怎么读入txt
- chekboxlist不能像WEB页中的有一个text和一个value属性啊?
- 在vs.net开发环境中的“自动提示下拉框”怎么做的啊?
- 奇怪的问题:我写了一个有关进程的程序,在"我的电脑"中的C,D,E,F磁盘中均正常运行,但到桌面就不能运行,请高人指点!
- 取得FTP上的文件夹的问题,用客户段软件可以,但是在程序里无法访问,FTP上也没有显示,但是的确存在这个文件夹,是不是防火墙的问题?
- 急!!遇到一个关于TableAdapter中insert无效的问题。
- 基于Ajax的三层架构代码自动生成器
- c#.net中怎么调用oracle的fuction
- 用 C# 在EXCEL中插入新的空行和删除空行 急!!! UP有分!!!
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 TreeCS
{
///
/// WebForm1 的摘要说明
///
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
private void Page_Load(object sender, System.EventArgs e)
{
// 定义数据库连接
SqlConnection CN = new SqlConnection();
try
{
//初始化连接字符串
CN.ConnectionString=
"data source=pmserver;initial catalog=Bench;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);
} //递归添加树的节点
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); //再次递归
}
}
} #region Web Form Designer generated code
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
}
}
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
//DataTable dt=(DataTable) this.ViewState["ds"];
TreeNode tmpNd;
string intId;
string strName;
string strId;
StringBuilder strTable = new StringBuilder(); dv.Table=datatable;
dv.RowFilter="MENU_PARENTID='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode(); strName = drv["MENU_NAME"].ToString();
strId = drv["MENU_ID"].ToString();
tmpNd.ID=strId; if(strId!="0")
{
strTable.Append(" .<a href='#a' onclick=\"javascript:main.location.href='addmenu_detail.aspx?id="+tmpNd.ID+"'\">");
strTable.Append(strName);
strTable.Append("</a><br>");
tmpNd.Text=strTable.ToString();
strTable.Remove(0,strTable.Length);
}
else
{
tmpNd.Text = strName;
}
Nds.Add(tmpNd);
intId=drv["MENU_PARENTID"].ToString();
InitTree(tmpNd.Nodes,tmpNd.ID);
}
}
开始调用时InitTree(TreeView1.Nodes,"最顶层根节点");你把onclick事件改一改,使datagrid显示传的值或ID