TreeView 绑定多级数据

前台页面代码:

 

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TreeView.aspx.cs" Inherits="TreeView" %>

<!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">
    <asp:TreeView ID="TreeView1" runat="server" ShowLines="True"   OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">
    </asp:TreeView>
    <asp:Button ID="btnOK" runat="server" Text=" 确 定  " CssClass="btn_2k3" OnClick="btnOK_Click" />
     <script>
        function postBackByObject() {
            var o = window.event.srcElement;
            if (o.tagName == "INPUT" && o.type == "checkbox") {
                __doPostBack("", "");
            }
        }
    </script>
    </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;

using net91com.Common;

public partial class TreeView : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.TreeView1.Attributes.Add("onclick", "postBackByObject()");
        if (!IsPostBack)
        {
            BindTree();

        }
    }


    #region 生成部门人员树
    private void BindTree()
    {
        string conn = "Server=localhost;DataBase=FlowWork;User ID=sa;Password=.;";
        //部门
        DataTable dt = net91com.Common.SqlHelper.ExecuteDataset(conn, CommandType.Text, "select * from Dept").Tables[0];
        //人员
        DataTable Userdt = net91com.Common.SqlHelper.ExecuteDataset(conn, CommandType.Text, "select * from [user]").Tables[0];
       
        //根节点
        TreeNode rootNode = new TreeNode();
        rootNode.Text = " <span style=/"font-size:14px;height:25px/"> 部门人员 </span>";

        rootNode.Value = "0";
        if (dt != null && dt.Rows.Count > 0)
        {
            DataRow[] rows = dt.Select("parentid=0");
            if (rows.Length > 0)
            {
                TreeNode childNode = null;
                for (int i = 0; i < rows.Length; i++)
                {
                    childNode = new TreeNode();
                    childNode.Value = rows[i]["ID"].ToString();
                    childNode.Text = "<span style=/"font-size:14px/"> " + rows[i]["DeptName"].ToString() + " </span>";
                    childNode.NavigateUrl = "javascript:void(0);";
                    childNode.Expanded = false;
                    childNode.ShowCheckBox = true;
                    childNode.SelectAction = TreeNodeSelectAction.Select;

                    TreeNode Usernode = null;
                    if (Userdt != null && Userdt.Rows.Count > 0)
                    {
                        string UserExprssion = "DeptID='" + childNode.Value + "'";
                        DataRow[] UserRow = Userdt.Select(UserExprssion);
                        if (UserRow.Length > 0)
                        {
                            for (int j = 0; j < UserRow.Length; j++)
                            {

                                Usernode = new TreeNode();
                                Usernode.Value = UserRow[j]["ID"].ToString();
                                Usernode.Text = "<span style=/"font-size:12px;font-color:#006699;/">" + UserRow[j]["UserName"].ToString();
                                Usernode.NavigateUrl = string.Format("javascript:GetUserInfo({0},'{1}')", Usernode.Value, UserRow[j]["UserName"].ToString());
                                Usernode.ShowCheckBox = true;
                                childNode.ChildNodes.Add(Usernode);
                               
                            }
                        }
                    }
                    rootNode.ChildNodes.Add(childNode);

                    BindChildNode(childNode.Value, childNode, dt, Userdt);
                }
            }
        }
        TreeView1.Nodes.Add(rootNode);
    }
    #endregion


    #region 递归子部门及人员
    private void BindChildNode(string SuperDeptID, TreeNode treenode, DataTable dt, DataTable Userdt)
    {
        if (dt != null && dt.Rows.Count > 0)
        {
            string Expression = "ParentID='" + SuperDeptID + "'";
            DataRow[] rows = dt.Select(Expression);
            TreeNode node = null;
            TreeNode Usernode = null;
            if (rows.Length > 0)
            {
                for (int i = 0; i < rows.Length; i++)
                {
                    node = new TreeNode();
                    node.Value = rows[i]["ID"].ToString();
                    node.Text = "  <span style=/"font-size:14px/"> " + rows[i]["DeptName"].ToString() + " </span>";
                    node.NavigateUrl = string.Format("javascript:javascript:void(0)");
                    node.Expanded = false;
                    node.ShowCheckBox = true;
                    node.SelectAction = TreeNodeSelectAction.Select;

                    if (Userdt != null && Userdt.Rows.Count > 0)
                    {
                        Usernode = new TreeNode();
                        string UserExprssion = "DeptID='" + node.Value + "'";
                        DataRow[] UserRow = Userdt.Select(UserExprssion);
                        if (UserRow.Length > 0)
                        {
                            for (int j = 0; j < UserRow.Length; j++)
                            {
                                Usernode = new TreeNode();
                                Usernode.Value = UserRow[j]["ID"].ToString();
                                Usernode.Text = "<span style=/"font-size:12px;font-color:#006699;/">" + UserRow[j]["UserName"].ToString();
                                Usernode.NavigateUrl = string.Format("javascript:GetUserInfo({0},'{1}')", Usernode.Value, UserRow[j]["UserName"].ToString());
                                Usernode.ShowCheckBox = true;
                                node.ChildNodes.Add(Usernode);
                               
                            }
                        }
                    }
                    treenode.ChildNodes.Add(node);
                    BindChildNode(node.Value, node, dt, Userdt);
                }
            }
        }
    }
    #endregion

    protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
    {
        SelectChild(e.Node);
        SelectParent(e.Node);
    }

    #region 选中一节点后所有子节点都被选中;取消一个节点后所有子节点都被取消
    /// <summary>
    /// 选中一节点后所有子节点都被选中;取消一个节点后所有子节点都被取消
    /// </summary>
    /// <param name="tnode"></param>
    private void SelectChild(TreeNode tnode)
    {
        for (int i = 0; i < tnode.ChildNodes.Count; i++)
        {
            tnode.ChildNodes[i].Checked = (tnode.Checked == true ? true : false);
            SelectChild(tnode.ChildNodes[i]);
        }
    }
    #endregion

    #region 选择一个节点其所有父辈被选中;取消选中的某节点,如果其兄弟节点还有被选中的,其父节点就都被选中,否则就取消父节点的选中状态
    /// <summary>
    /// 选择一个节点其所有父辈被选中;取消选中的某节点,如果其兄弟节点还有被选中的,其父节点就都被选中,否则就取消父节点的选中状态
    /// </summary>
    /// <param name="tnode"></param>
    private void SelectParent(TreeNode tnode)
    {
        bool bparent = false;
        if (tnode.Parent != null)
        {
            TreeNode parentNode = (TreeNode)tnode.Parent;
            for (int i = 0; i < parentNode.ChildNodes.Count; i++)
            {
                if (parentNode.ChildNodes[i].Checked == true)
                {
                    bparent = true;
                }
            }
            parentNode.Checked = bparent;
            SelectParent(parentNode);
        }

    }
    #endregion

 

 

    protected void btnOK_Click(object sender, EventArgs e)
    {
        string[] arr = new string[2];
        for (int i = 0; i < TreeView1.Nodes.Count; i++)
        {
            TreeNode tn = (TreeNode)TreeView1.Nodes[i];
            if (tn.Checked == true)
                GetTreeView(tn, ref arr);

        }
        if (arr[0] != null)
        {
            string reStr = arr[0].ToString().Substring(0, arr[0].Length - 1) + "|" + arr[1].ToString().Substring(0, arr[1].Length - 1);
            Response.Write( reStr);
        }
        else
        {
            Response.Write(" 你没有选择 ");
        }
    }

    private void GetTreeView(TreeNode tn, ref string[] arr)
    {
        for (int i = 0; i < tn.ChildNodes.Count; i++)
        {
            TreeNode tempTN = (TreeNode)tn.ChildNodes[i];
            if (tempTN.Checked == true)
            {
                if (tempTN.ChildNodes.Count == 0)
                {
                    arr[0] += tempTN.Value + ",";
                    arr[1] += tempTN.Text + ",";
                }
                else GetTreeView(tempTN, ref arr);
            }

        }

    }


}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值