TreeView控件要求绑定到xml数据源上,所以必须设法把数据库中的内存转成xml文件,然后再进行绑定。 首先,在网页中添加一个XmlDataSource: <asp:XmlDataSource ID="XmlDataSource1" runat="server"></asp:XmlDataSource> 和一个TreeView控件: <asp:TreeView ID="TreeView1" runat="server"></asp:TreeView> 然后在Page_load事件中添加以下代码: // 连接数据库 SqlConnection conn = new SqlConnection("连接字符串"); SqlCommand cmd = new SqlCommand("SELECT * FROM 数据表", conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); // 新建XML文档 XmlDocument doc = new XmlDocument(); XmlElement root; XmlElement element; // 插入xml声明 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, "yes"); doc.InsertBefore(dec, doc.DocumentElement); // 用来记录根节点元素 ArrayList elements = new ArrayList(); // 插入第一个节点 reader.Read(); element = doc.CreateElement((string)reader["name"]); elements.Add(element); doc.InsertAfter(element, dec); // 插入后面的子节点 while (reader.Read()) { // 创建子节点 element = doc.CreateElement((string)reader["name"]); elements.Add(element); // 找到它的父节点,然后添加到父节点下 root = (XmlElement)elements[(int)reader["parent"]-1]; root.AppendChild(element); } // 保存xml文件 FileStream fs = new FileStream(@"D:\Temp\names.xml", FileMode.Create); doc.Save(fs); fs.Close(); // 设置xml数据源控件并把它绑定到TreeView控件上 XmlDataSource1.DataFile = @"D:\Temp\names.xml"; TreeView1.DataSource = XmlDataSource1; TreeView1.DataBind(); 这样TreeView1就绑定了一个从数据库中读出的树结构,并在网页中显示出来。 再说明一下,TreeView是不可能绑定到一个关系数据库表的数据源上的,只能绑定到Xml数据源或SiteMapDataSource。
ID | Name | ParentID |
1 | 1 | 0 |
2 | 2 | 0 |
3 | 3 | 0 |
4 | 4 | 1 |
5 | 5 | 1 |
6 | 6 | 2 |
7 | 7 | 2 |
8 | 8 | 3 |
9 | 9 | 7 |
使用这种的数据库方法可以很方便的绑定到TreeView中,形成一个无限动态树.(当然还有其他的数据库的方法)
private void InitTree(TreeNodeCollection Nds, string ParentId)
...{
DataView dvroles = new DataView();
TreeNode tmpNd;
string strRID;
dvroles.Table = csa.CreateDataSet("DS1").Tables["T1"];//DataSet的DataTable表中
dvroles.RowFilter = " ParentID=" + ParentId;
foreach (DataRowView drvrole in dvroles)
...{
strRID = drvrole["ID"].ToString();
tmpNd = new TreeNode();
tmpNd.Value = drvrole["ID"].ToString();
tmpNd.Text = drvrole["Name"].ToString();
tmpNd.Target = drvrole["ParenID"].ToString();
Nds.Add(tmpNd);
InitRoleTree(tmpNd.ChildNodes, strRID);
}
}
在这里我们可以进行控制的树的信息有
Value | 节点的ID |
Text | 节点的显示信息 |
Target | 关联网页内容的目标窗口,如果没有关联网页,也可以做一个数据容器 |
ToolTip | 节点文本提示工具 |
ImageUrl | 节点图片 |
ImageToolTip | 节点图片文本提示工具 |