把TreeView的CheckBox选中值插入数据库,从数据库中读取数据后让CheckBox勾选

1、执行下面代码创建表NZ_Power

CREATE TABLE [dbo].[NZ_Power](
    [nz_id] [int] IDENTITY(1,1) NOT NULL primary key,
    [nz_column] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [nz_parentid] [int] NOT NULL,
)

2、前台代码

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeView.aspx.cs" Inherits="Common.TreeView" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6 <head runat="server">
 7     <title>无标题页</title>
 8     <script language="javascript"type="text/javascript" src="js/TreeViewCheckState.js"></script>
 9 </head>
10 <body>
11     <form id="form1" runat="server">
12     <div style="width:200px; margin:0 auto;">
13         <asp:TreeView ID="TVPower" runat="server" ShowCheckBoxes="All" ShowLines="True" >
14         </asp:TreeView>
15         <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
16         <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="默认" /><br />
17         <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
18     </form>
19 </body>
20 </html>

3、【TreeViewCheckState.js】代码

 

View Code
//TreeView onclick 触发事件
function client_OnTreeNodeChecked(event)
{
    //得到当前所 Click 的对象
    var objNode;
    if(!public_IsObjectNull(event.srcElement))
    {
        //IE
        objNode = event.srcElement;
    }
    else
    {
        //FF
        objNode = event.target;
    }

    //判断是否 Click 的 CheckBox
    if(!public_IsCheckBox(objNode))
        return;

    var objCheckBox = objNode;
    //根据CheckBox状态进行相应处理
    if(objCheckBox.checked==true)
    {
        //递归选中父节点的 CheckBox
        setParentChecked(objCheckBox);
       
        //递归选中所有的子节点
        setChildChecked(objCheckBox);
    }
    else
    {       
        //递归取消选中所有的子节点
        setChildUnChecked(objCheckBox);
       
        //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中).
        setParentUnChecked(objCheckBox);
    }
}

//判断对象是否为空
function public_IsObjectNull(element)
{
    if(element==null || element == "undefined")
        return true;
    else
        return false;
}

//判断对象是否为 CheckBox
function public_IsCheckBox(element)
{
    if(public_IsObjectNull(element))
        return false;
       
    if(element.tagName!="INPUT" || element.type!="checkbox")
        return false;
    else
        return true;
}
//得到包含所有子节点的 Node(Div 对象)
function public_CheckBox2Node(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("CheckBox"));
    return document.getElementById(objID+"Nodes");
}
//得到父节点的 CheckBox
function public_Node2CheckBox(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("Nodes"));
    return document.getElementById(objID+"CheckBox");
}
//得到本节点所在的 Node(Div 对象)
function public_GetParentNode(element)
{
    var parent = element.parentNode;
    var upperTagName = "DIV";
    //如果这个元素还不是想要的 tag 就继续上溯
    while (parent && (parent.tagName.toUpperCase() != upperTagName))
    {
        parent = parent.parentNode ? parent.parentNode : parent.parentElement;
    }
    return parent;
}


//设置节点的父节点 Checked
function setParentChecked(currCheckBox)
{
    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;   
   
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

    if(!public_IsCheckBox(objParentCheckBox))
        return;
       
    objParentCheckBox.checked = true;
    setParentChecked(objParentCheckBox);
}

//当父节点的所有子节点都未被选中时,设置父节点 UnChecked
function setParentUnChecked(currCheckBox)
{
    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;  
    //判断 currCheckBox 的同级节点是否都为 UnChecked.
    if(!IsMyChildCheckBoxsUnChecked(objParentNode))
        return;   
   
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

    if(!public_IsCheckBox(objParentCheckBox))
        return;
       
    objParentCheckBox.checked = false;   
    setParentUnChecked(objParentCheckBox);
}

//设置节点的子节点 UnChecked
function setChildUnChecked(currObj)
{
    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
      
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length;
    for(var i=0;i<count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = false;
        }
        setChildUnChecked(childCheckBox);
    }
}

//设置节点的子节点 Checked
function setChildChecked(currObj)
{
    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
       
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length;
    for(var i=0;i<count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = true;
        }
        setChildChecked(childCheckBox);
    }
}

//判断该节点的子节点是否都为 UnChecked
function IsMyChildCheckBoxsUnChecked(currObj)
{
    var retVal = true;
   
    var currNode;
    if(public_IsCheckBox(currObj) && currObj.checked == true)
    {
        return false;
    }
    else
        currNode = currObj;
      
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length;
    for(var i=0;i<count;i++)
    {
        if (retVal == false)
            break;
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
        {
            retVal = false;
            return retVal;
        }
        else
            retVal = IsMyChildCheckBoxsUnChecked(childCheckBox);        
    }
    return retVal;
}

 

4、后台代码

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace Common
{
    public partial class TreeView : System.Web.UI.Page
    {
        private static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                selectParent(new SqlConnection(connectionString));
                //GetCheckNode();
            }
            TVPower.Attributes.Add("OnClick", "client_OnTreeNodeChecked(event);");
        }

        #region//无限极树
        public void selectParent(SqlConnection conn)
        {
            string sql = "select  * from NZ_Power  where  nz_parentid=0";
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(dt);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dt.Rows[i]["nz_column"].ToString();
                tn.Value = dt.Rows[i]["nz_id"].ToString();
                tn.Expanded = false;
                this.TVPower.Nodes.Add(tn);
                selectChild(tn);
            }
        }

        /// <summary>
        /// 递归查询子节点
        /// </summary>
        public void selectChild(TreeNode tnn)
        {
            string sql = "select * from NZ_Power where nz_parentid=" + tnn.Value + "";
            DataTable dt1 = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(sql, new SqlConnection(connectionString));
            da.Fill(dt1);
            for (int i = 0; i < dt1.Rows.Count; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dt1.Rows[i]["nz_column"].ToString();
                tn.Value = dt1.Rows[i]["nz_id"].ToString();
                tn.Expanded = false;
                tnn.ChildNodes.Add(tn);
                selectChild(tn);
            }
        }
        #endregion
        #region//取得选中值
        protected void Button1_Click(object sender, EventArgs e)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (TreeNode tnd in TVPower.CheckedNodes)
            {
                sb.Append(tnd.Value + "|");
            }
            sb.Length -= 1;
            if (sb.ToString().Length == 0)
            {
                Label1.Text = "没有任何权限";
            }
            else
            {
                Label1.Text = sb.ToString();
            }
        }
        #endregion
        #region //根据uid从数据库中读取数据,然后勾选根节点的相应的CheckBox
        /// <summary>
        /// 从数据库中读取数据,然后勾选根节点的相应的CheckBox
        /// </summary>
        /// <param name="RoleId"></param>
        protected void BindTreeRoot(int [] strArray, TreeNodeCollection treenode)
        {
            foreach (TreeNode nodes in treenode)
            {
                if (nodes.ChildNodes.Count > 0)
                {
                    //根据UID查找赋值
                    for (int i = 0; i < strArray.Length; i++)
                    {
                        if (strArray[i].ToString() == nodes.Value.ToString())
                        {
                            nodes.Checked = true;
                        }
                        BindTreeRoot(strArray, nodes.ChildNodes);
                    }
                }
                else
                {
                    for (int i = 0; i < strArray.Length; i++)
                    {
                        if (strArray[i].ToString() == nodes.Value.ToString())
                        {
                            nodes.Checked = true;
                        }
                        BindTreeRoot(strArray, nodes.ChildNodes);
                    }
                }
            }
        }
        #endregion

        protected void Button2_Click(object sender, EventArgs e)
        {
            int[] strValue ={ 2, 4, 5, 6, 7, 9, 10, 33, 34, 35 };//初始选中节点的value【此处可以是从数据库读取的数据然后放到数组中】
            BindTreeRoot(strValue, TVPower.Nodes);
        }
    }
}

 

5、结果

posted @ 2012-11-19 14:03  蜗牛、、、  阅读(773)  评论(1编辑  收藏  举报