动态生成TreeView方法(二)

简介:

这次是用递归的方法实现 ,我想大家都知道怎么做吧,就不 多说了,

还是不建议用递归,数据量大了会映响速度,动态生成TreeView方法(一)是我比较喜欢的方法

看一下效果图

前台代码:

复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewPageTwo.aspx.cs" Inherits="WebApplication3.TreeViewPageTwo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView id="tv_Method" runat="server">

</asp:TreeView>
</div>
</form>
</body>
</html>
复制代码

后台代码:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace WebApplication3
{
public partial class TreeViewPageTwo : System.Web.UI.Page
{
private DataTable da = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
da = CreateTable();
CreateNode();
}

}

//创建父节点
public void CreateNode()
{
DataRow[] rows = da.Select("parentID=0");//取出树的根节点
if (rows.Length > 0)
{
foreach (DataRow row in rows)
{
TreeNode root = new TreeNode();//添加一个节点
root.Value = row["MenuID"].ToString();
root.Text = row["MenuName"].ToString();
root.Expanded = false;
root.SelectAction = TreeNodeSelectAction.Expand;
tv_Method.Nodes.Add(root);
CreateChildNode(root, da);//调用添加子节点
}
}
else
{
TreeNode root = new TreeNode();//添加一个节点
root.Value = "为空";
root.Text ="为空";
root.Expanded = false;
root.SelectAction = TreeNodeSelectAction.Expand;
tv_Method.Nodes.Add(root);
}
}

//创建孩子节点
public void CreateChildNode(TreeNode parentNode, DataTable dt)
{
//获取父亲节点下面的所有子节点
DataRow[] rows = dt.Select("parentID=" + parentNode.Value);
if (rows.Length > 0)
{
foreach (DataRow row in rows)
{
TreeNode node = new TreeNode();
node.Value = row["MenuID"].ToString();
node.Text = row["MenuName"].ToString();
node.Expanded = false;
node.SelectAction = TreeNodeSelectAction.Expand;
parentNode.ChildNodes.Add(node);
//递归调用添加子节点
CreateChildNode(node, dt);
}
}
}

//创建Table
public DataTable CreateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("MenuID", Type.GetType("System.Int32"));
dt.Columns.Add("parentID", Type.GetType("System.Int32"));
dt.Columns.Add("MenuName", Type.GetType("System.String"));

DataRow dr = dt.NewRow();
dr["MenuID"] = 1;
dr["parentID"] = 0;
dr["MenuName"] = "中国";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["MenuID"] = 2;
dr["parentID"] = 0;
dr["MenuName"] = "日本";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["MenuID"] = 3;
dr["parentID"] = 0;
dr["MenuName"] = "美国";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["MenuID"] = 4;
dr["parentID"] = 1;
dr["MenuName"] = "朝阳区";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["MenuID"] = 5;
dr["parentID"] = 1;
dr["MenuName"] = "海淀区";
dt.Rows.Add(dr);



return dt;
}



}
}
复制代码


本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2011/11/22/2258513.html,如需转载请自行联系原作者


相关文章
|
5月前
|
存储 C# 开发者
C# | 通过反射将对象属性展示在TreeView中
在编程过程中,我们经常需要处理复杂的对象和数据结构。将这些数据结构展示在UI界面上是很有用的,可以帮助开发者更好地理解和分析数据。 而TreeView作为一种常见的控件,可以以树状结构的方式展示数据,非常适合用于展示层次化的对象。 本文将介绍如何使用TreeView控件展示一个对象,并且可以动态处理对象中的属性和子对象。通过本文的学习,您将学会如何更好地理解和展示数据,提高编程效率。
36 0
C# | 通过反射将对象属性展示在TreeView中
|
C#
WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
1.TreeView选择事件执行两次 Very often, we need to execute some code in SelectedItemChanged depending on the selected TreeViewItem.
1107 0