时间有限就直接贴源码吧,理解思路即可。

页面代码:

<asp:TreeView ID="TreeViewLeft" runat="server" ShowLines="True" ExpandDepth="2"
Target="mainFrame" ontreenodeexpanded="TreeViewLeft_TreeNodeExpanded1">
</asp:TreeView>

.cs文件代码:

    protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddNode(6160); //父节点Id
}
}
#region 页面加载时,加载第0级和第1级节点
private void AddNode(int parentId)
{
string UserId = HttpContext.Current.Session["zhy_UserId"].ToString();
//通过传进来的参数,得到数据集
string strSQL = "select * from "
+ "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
+ "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
+ "FROM [zhy_AdminMenu] "
+ "WHERE [ClassID] = 0 And DeleteSign=0 AND [IsPublic] IN (0,1) AND IsStage=2 AND [PARENTID]=@parentId) as a "
+ "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
+ "ORDER BY [ParentID] ASC, [Sort] DESC ";
if (Session["IsProgrammer"].ToString() == "1")
{
strSQL = "select * from "
+ "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
+ "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
+ "FROM [zhy_AdminMenu] "
+ "WHERE [ClassID] = 0 And DeleteSign=0 AND IsStage=2 AND [PARENTID]=@parentId) as a "
+ "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
+ "ORDER BY [ParentID] ASC, [Sort] DESC ";
}
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@parentId",parentId)
};
//Response.Write(strSQL);
//Response.End();
DataSet ds = GetDataSet(strSQL, paras);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if ((int)ds.Tables[0].Rows[i]["IsPublic"] != 1 && (int)ds.Tables[0].Rows[i]["IsPublic"] != 2)
{
if (zhyPurview.PageRegionValidateRolesUnallow(ds.Tables[0].Rows[i]["RolesUnallow"].ToString(), UserId))
{
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
i--;
}
else if (!zhyPurview.PageRegionValidateRolesAllow(ds.Tables[0].Rows[i]["RolesAllow"].ToString(), UserId) && !zhyPurview.PageRegionValidateUsersAllow(ds.Tables[0].Rows[i]["UsersAllow"].ToString(), UserId))
{
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
i--;
}
}
} //循环遍历,加载所有0级节点和1级节点
foreach (DataRow Row in ds.Tables[0].Rows)
{
TreeNode Node = new TreeNode();
Node.Text = Row["Name"].ToString();
Node.SelectAction = TreeNodeSelectAction.Expand; Node.Value = Row["id"].ToString();
Node.NavigateUrl = Row["HyperLinkPage"].ToString();
if (Row["Target"].ToString() == "1")
{
Node.Target = "_blank";
}
TreeViewLeft.ExpandDepth = 0;
TreeViewLeft.Nodes.Add(Node);
AddChildNodes(Node); //再次递归
}
}
#endregion #region 增加子节点
public void AddChildNodes(TreeNode pNode)
{
string UserId = HttpContext.Current.Session["zhy_UserId"].ToString();
//通过传进来的参数,得到所有子节点的数据集
string strSQL = "select * from "
+ "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
+ "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
+ "FROM [zhy_AdminMenu] "
+ "WHERE [ClassID] = 0 And DeleteSign=0 AND [IsPublic] IN (0,1) AND IsStage=2 AND [PARENTID]=@parentId) as a "
+ "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
+ "ORDER BY [ParentID] ASC, [Sort] DESC ";
if (Session["IsProgrammer"].ToString() == "1")
{
strSQL = "select * from "
+ "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
+ "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
+ "FROM [zhy_AdminMenu] "
+ "WHERE [ClassID] = 0 And DeleteSign=0 AND IsStage=2 AND [PARENTID]=@parentId) as a "
+ "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
+ "ORDER BY [ParentID] ASC, [Sort] DESC ";
}
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@parentId",pNode.Value)
};
DataSet ds = GetDataSet(strSQL, paras);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if ((int)ds.Tables[0].Rows[i]["IsPublic"] != 1 && (int)ds.Tables[0].Rows[i]["IsPublic"] != 2)
{
if (zhyPurview.PageRegionValidateRolesUnallow(ds.Tables[0].Rows[i]["RolesUnallow"].ToString(), UserId))
{
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
i--;
}
else if (!zhyPurview.PageRegionValidateRolesAllow(ds.Tables[0].Rows[i]["RolesAllow"].ToString(), UserId) && !zhyPurview.PageRegionValidateUsersAllow(ds.Tables[0].Rows[i]["UsersAllow"].ToString(), UserId))
{
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
i--;
}
}
} foreach (DataRow Row in ds.Tables[0].Rows)
{
TreeNode Node = new TreeNode();
Node.Value = Row["id"].ToString();
Node.Text = Row["Name"].ToString(); Node.SelectAction = TreeNodeSelectAction.Expand;
Node.NavigateUrl = Row["HyperLinkPage"].ToString();
if (Row["Target"].ToString() == "1")
{
Node.Target = "_blank";
}
pNode.ChildNodes.Add(Node);
pNode.NavigateUrl = "";
}
}
#endregion #region 通过sql语句,得到数据集
public static DataSet GetDataSet(string strSQL, params SqlParameter[] values)
{
try
{ using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["NMXT_DBConn"].ToString()))
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSQL;
cmd.CommandTimeout = 60;
cmd.Parameters.AddRange(values);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
catch (Exception ex)
{
throw new Exception(values[0].Value + "——" + strSQL);
}
}
#endregion #region 当点击第0级节点的时候,加载第1级的所有子节点 protected void TreeViewLeft_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
foreach (TreeNode subNode in e.Node.ChildNodes)
{
if (subNode.ChildNodes.Count <= 0)
{
AddChildNodes(subNode);
}
}
} #endregion

  

仿Windows制作TreeView数据加载的更多相关文章

  1. 单表数据加载到TreeView(.Node.Level>=2) "蝴蝶效应" SelectedNode注意事项 效能优化 综合问题

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Configurat ...

  2. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

  3. 【微信小程序】模仿58同城页面制作以及动态数据加载

    完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...

  4. WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日

    进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...

  5. [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader

    [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 目录 [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 0x00 摘要 0x01 ...

  6. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

  7. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  8. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  9. flask+sqlite3+echarts3+ajax 异步数据加载

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

随机推荐

  1. hibernate.cfg.xml文件连接mySql、Oracle、SqlServer配置

    1.连接mySql,文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...

  2. libevent2源码分析之四:libevent2的消息泵

    Dispatch类似于一个消息泵,在一个死循环中,不停地检查IO的状态(可以想像成不断从消息队列中读取消息),将状态的改变变成事件,再进行事件的响应. 主要代码如下: [event.c] int ev ...

  3. Android笔记:invalidate()和postInvalidate() 的区别及使用——刷新ui

    Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中 ...

  4. freemarker相关

    大部分引入:http://www.blogjava.net/alinglau36/archive/2011/02/23/344970.html Freemarker操作字符串 1.substring( ...

  5. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

  6. 《C#程序设计教程 -李春保》阅读笔记

    <C#程序设计教程 -李春保>阅读笔记   ( 需注意程度:红>粗体>下划线,蓝色:我的疑问 )   老师的引言 [师]对待一种新语言的关注点 数据类型定义(python不用定 ...

  7. Nginx通过CORS实现跨域(转)

    如果前端有nginx方向代理,跨域配置在前端反向代理nginx上 要做跨域域名限制 什么是CORS CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource shari ...

  8. excel文件打开乱码解决

    Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取.(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储 ...

  9. IIS如何添加m3u8流媒体类型

    m3u8,mime类型填写: application/x-mpegURL. ts ,mime类型填写: video/MP2T

  10. Atitit.atijson 类库的新特性设计与实现 v3 q31

    Atitit.atijson 类库的新特性设计与实现 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh脚本化2 3. V3版本新特性---循环引用解决使用fastjs ...