Asp.net TreeView动态加载节点(一)

1.TreeNode的PopulateOnDemand="True"后节点就是动态从后台加载的.

2.但是如果上层TreeView的EnableClientScript="false",就会导致页面Postback

3.TreeView的TreeNodePopulate是PopulateOnDemand="True"并且TreeNode内已有数据才触发的

4.TreeNode的Depth属性是指从根结点算起到现在节点的层数,根结点层数为0

5.TreeNode NewNode = new TreeNode(row["CategoryName"].ToString(),row["CategoryID"].ToString())的第一个参数设置了

TreeNode类的Value 属性值.这个属性值会在发生TreeNodePopulate()事件的TreeNode对像回传用到.sqlQuery.Parameters.Add

("@categoryid", SqlDbType.Int).Value =node.Value;

附代码:

一、HTML

  1. <asp:SqlDataSource ID="SqlDataSource1" runat="server"
  2. ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
  3. SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]">
  4. </asp:SqlDataSource>
  5. <asp:TreeView ID="TreeView1" runat="server" MaxDataBindDepth="2"
  6. ontreenodepopulate="TreeView1_TreeNodePopulate" EnableClientScript="true" ExpandDepth="0">
  7. <Nodes>
  8. <asp:TreeNode PopulateOnDemand="True" Text="产品列表" Value="产品列表"></asp:TreeNode>
  9. </Nodes>
  10. </asp:TreeView>

二、C#

  1. protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
  2. {
  3. if (e.Node.ChildNodes.Count == 0)
  4. {
  5. switch (e.Node.Depth)
  6. {
  7. case 0:
  8. PopulateCategories(e.Node);
  9. break;
  10. case 1:
  11. PopulateProducts(e.Node);
  12. break;
  13. }
  14. }
  15. }
  16. void PopulateCategories(TreeNode node)
  17. {
  18. SqlCommand sqlQuery = new SqlCommand(
  19. "Select CategoryName, CategoryID From Categories");
  20. DataSet resultSet;
  21. resultSet = RunQuery(sqlQuery);
  22. if (resultSet.Tables.Count > 0)
  23. {
  24. foreach (DataRow row in resultSet.Tables[0].Rows)
  25. {
  26. TreeNode NewNode = new
  27. TreeNode(row["CategoryName"].ToString(),
  28. row["CategoryID"].ToString());
  29. NewNode.PopulateOnDemand = true;
  30. NewNode.SelectAction = TreeNodeSelectAction.Expand;
  31. node.ChildNodes.Add(NewNode);
  32. }
  33. }
  34. }
  35. void PopulateProducts(TreeNode node)
  36. {
  37. SqlCommand sqlQuery = new SqlCommand();
  38. sqlQuery.CommandText = "Select ProductName From Products " +
  39. " Where CategoryID = @categoryid";
  40. sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value =
  41. node.Value;
  42. DataSet ResultSet = RunQuery(sqlQuery);
  43. if (ResultSet.Tables.Count > 0)
  44. {
  45. foreach (DataRow row in ResultSet.Tables[0].Rows)
  46. {
  47. TreeNode NewNode = new
  48. TreeNode(row["ProductName"].ToString());
  49. NewNode.PopulateOnDemand = false;
  50. NewNode.SelectAction = TreeNodeSelectAction.None;
  51. node.ChildNodes.Add(NewNode);
  52. }
  53. }
  54. }
  55. private DataSet RunQuery(SqlCommand sqlQuery)
  56. {
  57. string connectionString =
  58. ConfigurationManager.ConnectionStrings
  59. ["NorthwindConnectionString"].ConnectionString;
  60. SqlConnection DBConnection =
  61. new SqlConnection(connectionString);
  62. SqlDataAdapter dbAdapter = new SqlDataAdapter();
  63. dbAdapter.SelectCommand = sqlQuery;
  64. sqlQuery.Connection = DBConnection;
  65. DataSet resultsDataSet = new DataSet();
  66. try
  67. {
  68. dbAdapter.Fill(resultsDataSet);
  69. }
  70. catch
  71. {
  72. labelStatus.Text = "Unable to connect to SQL Server.";
  73. }
  74. return resultsDataSet;
  75. }
时间: 2024-08-09 02:20:56

Asp.net TreeView动态加载节点(一)的相关文章

ASP.NET MVC 动态加载 *.ascx

在Controller中: public ActionResult LoadFoo()        {             return PartialView("Foo", aModel);        } Javascript: function loadFoo() {        $.ajax({            url: "LoadFoo",            success: function(data) {              

在ASP.NET中动态加载内容(用户控件和模板)

在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30% runat=server id=Con

ASP.NET MVC动态加载数据

ASP.NET MVC动态加载数据,一般的做法是使用$.each方法来循环产生tabel: 你可以在html时先写下非动态的部分: <table> <tr> <th style="width:10px;"><input id="SelectAll" type="checkbox" /></th> <th>ID</th> <th>Port_Start&l

ligerui_ligerTree_007_ligerTree动态加载节点

ligerui:ligerTree:动态加载节点: 源码地址:http://download.csdn.net/detail/poiuy1991719/8571255 效果图: 代码:json.txt [ { text: '节点1', children: [ { text: '节点1.1' }, { text: '节点1.2' }, { text: '节点1.3', children: [ { text: '节点1.3.1' ,children: [ { text: '节点1.3.1.1' },

ASP.NET中动态加载母版页

在项目开发中,有时应用程序希望能够根据特定的情形来动态地设置母版页.需要动态加载母版页的情形有两种:允许用户使用不同的母版页定制外观呈现:当与其他公司合作,需要调整页面与合作伙伴相同的外观. 开发人员可以通过Page类提供的MasterPageFile属性来为内容页设置母版页.母版页与内容页在页声明周期的早期进行合并.因此不能直接在内容页的Page_Load事件中设置母版页.而需要在Page.PreInit事件中动态加载母版页(Page.PreInit是页执行周期中的第一个事件). [示例]下面

继承,多态,集合,面向对象,XML文件解析,TreeView动态加载综合练习-----&gt;网络电视精灵项目练习、分析

网络电视精灵 项目运行状态如图: 项目完成后的类: 首先,将程序分为二部分进行: 一:TreeView节点内容的设计及编写: 1.1遍写XML文件:管理(FullChannels.xml),A类电视台北京电视台(北京电视台.xml),B类电视台凤凰卫视(凤凰卫视.xml) 1.2创建一个抽象的电视频道父类,ChannelBase,其中有成员:频道名称,频道路径,节目列表(以电视节目类作为类型的集合),解析频道节目单的抽象方法.代码如下: using System; using System.Co

ztree插件动态加载节点

1.ztree官网首页下载所需zip,下载方式为 GitHub 方式下载 HTTPS : https://gitee.com/zTree/zTree_v3.git SSH : [email protected]:zTree/zTree_v3.git 2.在jsp页面中引入 js.css文件 <link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">

ASP.NET MVC 动态加载图像

private ImageInfo CreateImageFile(string fileName)        {            if (!File.Exists(fileName))                return null;            Image image = Image.FromFile(fileName);            MemoryStream ms = new MemoryStream();            image.Save(m

动态加载TreeView时让TreeView节点前显示加号

解释下标题,我这里通过webservice获取数据并动态加载TreeView节点,那么某个节点展开前它是没有子节点的,那么它就不显示加号,这样会让用户误以为此节点不能展开.我是这样做的,每次创建节点a时,默认为它创建一个子节点b(随便给个名字就行,假设为"呵呵"),那么创建的节点a就有了子节点b,也就会显示加号了,等展开节点a时,再把刚才默认创建的子节点b移除就可以了,删除方法是先判断展开的节点a是否有一个子节点并且名字为"呵呵",如果为真则删掉. 当然这样做导致有