转自:http://blog.sina.com.cn/s/blog_8944756d01016yaj.html

前台:

<asp:View ID="view0" runat="server">
                <asp:TreeView ID="treeLanMu" runat="server" ImageSet="Arrows"
                    onselectednodechanged="treeLanMu_SelectedNodeChanged"  >
                </asp:TreeView>
            </asp:View>

后台:

/// <summary> 
        /// 递归绑定子节点 
        /// </summary> 
        /// <param name="dt">作为数据源的DataTable</param> 
        /// <param name="tnc">该节点的子节点集合</param> 
        /// <param name="pid_val">该节点的父节点值</param> 
        /// <param name="id_Name">DataTable中id字段的名称</param> 
        /// <param name="pid_Name">DataTable中父id字段的名称</param> 
        /// <param name="text_Name">DataTable中name字段的名称</param> 
        private void BindTreeView(DataTable dt, TreeNodeCollection tnc, string pid_val, string id_Name, string pid_Name, string text_Name)
        {
            dt = GetAllLanmu();
            DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据 
            TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中 
            //以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件 
            string filter = string.IsNullOrEmpty(pid_val) ? pid_Name + " is null" : string.Format(pid_Name + "='{0}'", pid_val);
            dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据 
            foreach (DataRowView drv in dv)
            {
                tn = new TreeNode();//建立一个新节点 
                tn.Value = drv[id_Name].ToString();//节点的Value值,一般为数据库的id值 
                tn.Text = drv[text_Name].ToString();//节点的Text,节点的文本显示 
                tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中 
                BindTreeView(dt, tn.ChildNodes, tn.Value, id_Name, pid_Name, text_Name);//递归(反复调用这个方法,直到把数据取完为止) 
            }
        }

调用:

DataTable dtGetN = db.GetAllLanmu();
             BindTreeView(dtGetN, treeLanMu.Nodes, null, "lindex", "parentindex", "lname");
             treeLanMu.ExpandAll();

另一种方法:

private void BindTreeView()

{

treeLanMu.Nodes.Clear();

DataTable dtpindex = db.GetAllByParentIndex("-1");

TreeNode unitNode = new TreeNode();

if (dtpindex.Rows.Count!=0)

{

for (int i = 0; i < dtpindex.Rows.Count; i++)

{

string Pname = dtpindex.Rows[i]["lname"].ToString();

unitNode.Text = Pname;

treeLanMu.Nodes.Add(unitNode);

BindDepartmentTree(dtpindex.Rows[i]["lindex"].ToString(), unitNode);

}

}

}

private void BindDepartmentTree(string parentId, TreeNode node)

{

DataTable dt = db.GetAllByParentIndex(parentId);

for (int i = 0; i < dt.Rows.Count; i++)

{

string id = dt.Rows[i]["lindex"].ToString();

string name = dt.Rows[i]["lname"].ToString();

TreeNode snode = new TreeNode(name);

snode.Value = id;

node.ChildNodes.Add(snode);

BindDepartmentTree(id, snode);

}

}

《转》---使用递归方法DataTable 绑定 TreeView的更多相关文章

  1. datatable绑定comboBox显示数据[C#]

    实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: 1.生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1 ...

  2. 【Winform】DataTable绑定到ComboBox

    我们从数据库中查询出来的数据存放在Datatable中 1.DataTable绑定到ComboBox上 cmbRole.DataSource = datatable; cmbRole.DisplayM ...

  3. DataGridView插入一行数据和用DataTable绑定数据2种方式

    以前不会用DataGridView的时候一直使用DataTable绑定的方式,如下: DataTable table = new DataTable(); //给表添加一列Name,此名字和 tabl ...

  4. datatable绑定comboBox,在下拉菜单中显示对应数据

    实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: .生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1; ...

  5. HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架

    HTTP模拟工具 开发语言:C#/Winform开发工具:Visual Studio 2017数据库:   SQLite使用框架:界面-MetroModernUI              Http请 ...

  6. c# 后台绑定treeview 多个tab

    <wijmo:C1Tabs ID="C1Tab1" runat="server" ><%--OnSelectedChanged="& ...

  7. 循环遍历DataTable绑定到Table

    VoteList2.cs: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  8. bootstrap DataTable绑定数据带服务器分页

    <!-- DataTables -->  这两个文件在我的文件夹里面<script src="~/bower_components/datatables.net/js/jq ...

  9. c# 后台绑定treeview 单个tab

    <wijmo:C1TreeView ID="C1TreeView1" runat="server" ShowCheckBoxes="true&q ...

随机推荐

  1. 【转】Kali Linux 新手折腾笔记

    原作者:http://defcon.cn/1618.html 最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估计会出现的问题上一篇文章<VMware虚拟机安装Kali ...

  2. linux挂载共享文件夹

    挂载windows共享目录或FTP: 方式一:包含密码 Shell代码 收藏代码 sudo mount //192.168.10.22/FTPServer /windows -o username=u ...

  3. [Effective Java]第十章 并发

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. bzoj 1202: [HNOI2005]狡猾的商人 并查集好题

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2946  Solved: 1384[Submit][Sta ...

  5. 《Linux内核设计的艺术》学习笔记(五)INT 0x10中断

    参考书籍: 1. <IBM-PC汇编语言程序设计> 2. http://www.ctyme.com/intr/int-10.htm   ◆ 设置显示方式: 功能号:AH = 00H 调用参 ...

  6. iOS - UIApplication

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIApplication : UIResponder @available(iOS 2.0, *) public ...

  7. [转载] 根据多年经验整理的《互联网MySQL开发规范》

    原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...

  8. 【ufldl tutorial】Softmax Regression

    今天太长姿势了,什么叫懂了也写不出代码说的不就是我吗,就那么几行代码居然叽叽歪歪写了一个小时. 首先exercise要实现的是softmax的cost function和gradient,如下图: ( ...

  9. HTML介绍、文档基本结构、meta标签、HTML标记的语法

    一.HTML的介绍 Hyper Text Mark-up Language 超文本标记语言,是一种描述性标记语言(不是编程语言),主要用于描述网页(可以有图像,文字,声音,等..)但没有交互性 HTM ...

  10. a++ ++a 文件上传函数错误 smarty模板特点

    b = a++; 会先把a初始的值赋值给b,然后a自增1. c = ++a; 先把a自增1,再把增1以后的结果赋值给c.  只要记住在使用的时候  $a++  是先返回$a,再将$a本身的值改变.   ...