前台页面代码:
<%@ 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);
}
}
}
}