zoukankan      html  css  js  c++  java
  • 经典实例--客户端操作带CheckBox的TreeView

    经典实例--客户端操作带CheckBox的TreeView(1)--选择 /取消父节点后其所有子节点自动选择 /取消。不过里面有点小问题要注意:

    (1)就是如何初始化已经选择的节点:注意要从客户端初始化的(把选择的节点放在客户端一个隐藏域里通过JS初始化).如果你在服务器端初始化了将无法在客户端修改它的状态.

    (2)如何获得客户端设置的节点:在客户端改变了选择状态(node.setAtrribute("check","ture"))后,通过服务器端是无法获得选择的值的,也只能在客户端获得它(通过一个input type="hiiden" runat="server"来保存选择的值).

    详细代码:
    <script language="javascript">

                
    //初始化选中节点
                function initchecknode()
                
    {
                    
    //获得需要初始化选择状态的节点的字符串.
                    var selectedNodes = document.all.checkedNodes.value;
                    
    var arrayNodes = new Array();
                    arrayNodes 
    = selectedNodes.split(",");
                    
    var AllRootNode=new Array();
                    AllRootNode
    =document.getElementById("TreeView1").getChildren();
                    
    //初始化选择的节点
                    findAndCheckedNodes(AllRootNode,arrayNodes);
                }


                
    //根据已选择的节点的字符串初始化选择的节点
                function findAndCheckedNodes(NodeArray,nodeDatas)
                
    {
                    
    //alert(NodeArray.length);
                     if(parseInt(NodeArray.length)==0)
                     
    {
                        
    return;
                    }

                    
    else
                    
    {
                        
    for(var i=0;i<parseInt(NodeArray.length);i++)
                        
    {
                            
    var cNode,nodeData;
                            cNode
    =NodeArray[i];
                            
    ////如果该节点在nodeDatas里则初始化checked = true;
                            nodeData = cNode.getAttribute("NodeData");
                            
    for(var j=0;j<nodeDatas.length;j++)
                            
    {
                                
    if(nodeDatas[j] == nodeData)
                                
    {
                                    cNode.setAttribute(
    "checked","true");
                                    
    break;
                                }

                            }

                            
    //如果有子节点,则继续递归
                            if(parseInt(cNode.getChildren().length)!=0)
                            findAndCheckedNodes(cNode.getChildren(),nodeDatas);    
                        }

                    }

                }

                
                
    //节点的oncheck事件
                function tree_oncheck(tree)
                
    {
                    
    var node=tree.getTreeNode(tree.clickedNodeIndex);
                    
    var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
                    setcheck(node,Pchecked);
                    document.all.checkedNodes.value
    ="";
                    document.all.unchecked.value
    ="";
                    FindCheckedFromNode(TreeView1);
                }

                
    //设置子节点选中
                function setcheck(node,Pc)
                
    {
                    
    var i;
                    
    var ChildNode=new Array();
                    ChildNode
    =node.getChildren();
                     
                    
    if(parseInt(ChildNode.length)==0)
                        
    return;
                    
    else
                    
    {
                        
    for(i=0;i<ChildNode.length;i++)
                        
    {
                            
    var cNode;
                            cNode
    =ChildNode[i];
                            
    if(parseInt(cNode.getChildren().length)!=0)
                                setcheck(cNode,Pc);
                            cNode.setAttribute(
    "checked",Pc);
                        }

                    }

                }

                
    //获取所有节点状态
                function FindCheckedFromNode(node) 
                
    {
                    
    var i = 0;
                    
    var nodes = new Array();
                    nodes 
    = node.getChildren();
                     
                    
    for (i = 0; i < nodes.length; i++
                    
    {
                        
    var cNode;
                        cNode
    =nodes[i];
                        
    if (cNode.getAttribute("checked"))
                            AddChecked(cNode);
                        
    else
                            AddUnChecked(cNode);
                          
                        
    if (parseInt(cNode.getChildren().length) != 0 ) 
                        
    {
                            FindCheckedFromNode(cNode);
                        }

                    }

                }

                
    //添加选中节点
                function AddChecked(node) 
                
    {
                    document.all.checkedNodes.value 
    += node.getAttribute("NodeData");
                    document.all.checkedNodes.value 
    += ',';
                }

                
    //添加未选中节点
                function AddUnChecked(node)
                
    {
                    document.all.unchecked.value 
    += node.getAttribute("NodeData");
                    document.all.unchecked.value 
    += ',';
                }

                
            
    </script>

     

        <body MS_POSITIONING="FlowLayout" onload="initchecknode()">
            
    <form id="Form1" method="post" runat="server">
                
    <FONT face="宋体">
                    
    <TABLE class="main" id="Table1">
                        
    <TR>
                            
    <TD></TD>
                            
    <TD align="center" height="50">权限管理</TD>
                            
    <TD></TD>
                        
    </TR>
                        
    <TR>
                            
    <TD></TD>
                            
    <TD>用户名:
                                
    <asp:label id="lblUserName" runat="server">Label</asp:label></TD>

                            
    <TD></TD>
                        
    </TR>
                        
    <TR>
                            
    <TD></TD>
                            
    <TD><iewc:treeview id="TreeView1" runat="server" ExpandLevel="1" SelectExpands="True" SystemImagesPath="/webctrl_client/1_0/treeimages/"
                                    ImageUrl
    ="images/fclose.gif" SelectedImageUrl="images/bookmark.gif" ExpandedImageUrl="images/fopen.gif"
                                    Target
    ="main" AutoSelect="True" wilth="100%"></iewc:treeview></TD>
                            
    <TD></TD>
                        
    </TR>
                        
    <TR>
                            
    <TD></TD>
                            
    <TD align="center" height="50">
                                
    <asp:button id="BtnSure" runat="server" Text="保存"></asp:button>&nbsp;
                            
    </TD>
                            
    <TD></TD>
                        
    </TR>
                    
    </TABLE>
                
    <INPUT id="checkedNodes" type="hidden" size="32" runat="server" NAME="checkedNodes"> <!--已经选择的节点每个节点间用","分隔.-->
                
    <INPUT id="unchecked" type="hidden" size="32">
            
    </form>
        
    </body>

    主要后台代码:




            
    //数据访问实例
    protected ClassConn connE = new ClassConn();

    private void Page_Load(object
     sender, System.EventArgs e)
    {
        
    // 在此处放置用户代码以初始化页面

        if ( !IsPostBack)
        
    {
            TreeView1.Attributes.Add(
    "oncheck","tree_oncheck(this)"
    );
            ViewState[
    "UserId"= Request.QueryString["id"]+string
    .Empty;

            
    //初始化用户名

            lblUserName.Text=connE.GetFieldValue("string","select name from EPM_EmployeeList where id = "+ViewState["UserId"].ToString());
            ViewState[
    "dsTree"= connE.getDs("select * from EPM_DepartmentList where corpid="+Session["EnterpriseId"].ToString()+" and (type ="+Session["EnterpriseType"].ToString()+" or type=2)  and state=1 order by ShowIndex"
    );
            connE.Close();
            
    //初始化权限信息    

            InitData();


            
        }

    }



    /// <summary>
    /// 初始化权限树.
    /// </summary>

    /// <param name="nFatherid">父节点的ID</param>
    /// <param name="node"></param>

    protected void initTree( int nFatherid,TreeNode fatherNode)
    {
        DataSet ds 
    = (DataSet)ViewState["dsTree"
    ];
        DataView dv 
    = new DataView(ds.Tables[0
    ]);
        dv.RowFilter 
    = "[parentDeptid] = "+
    nFatherid;
        
        
    foreach ( DataRowView Row in
     dv )
        
    {
            TreeNode node 
    = new
     TreeNode();
            
    if (fatherNode == null)//根节点

            {
                node.Text
    =Row["name"
    ].ToString();
                node.NodeData 
    = Row["id"
    ].ToString();
                node.CheckBox 
    = true
    ;
                
    this
    .TreeView1.Nodes.Add(node);
                
    //node.Expanded=false;//是否展开,若设置为true 则ExpandLevel="1" 无效

                initTree(Int32.Parse(Row["id"].ToString()),node);//递归
            }

            
    else
            
    {
                node.Text 
    = Row["name"
    ].ToString();
                node.NodeData 
    = Row["id"
    ].ToString();
                
    //node.NavigateUrl = Row["url"].ToString();

                node.CheckBox = true;
                fatherNode.Nodes.Add(node);
                initTree(Int32.Parse(Row[
    "id"].ToString()),node);//递归

            }

        }


    }


    /// <summary>
    /// 设置权限的字符串,没个权限间用逗号分隔.
    /// </summary>

    /// <returns></returns>

    private string  InitPowers()
    {
        
    string strPowers = string
    .Empty;
        
    string strSql = "select id, DeptID from  EPM_PowerList where EMPid ="+ViewState["UserId"
    ].ToString();
        SqlDataReader reader 
    =
     connE.getDreader(strSql);
        
    while
    (reader.Read())
        
    {
            
    if (strPowers.Length == 0
    )
            
    {
                strPowers 
    = reader[1
    ].ToString();
            }

            
    else
            
    {
                strPowers 
    += ","+reader[1
    ].ToString();
            }

        }

        reader.Close();
        
    return strPowers;
    }


    /// <summary>
    /// 初始化权限树
    /// </summary>

    private void InitData()
    {
        
    //获得权限字符串

        string strPowers = InitPowers();
        
    //把权限字符串赋给checkedNodes.

        this.checkedNodes.Value = strPowers;
        
    //初始化菜单树,使用递归调用.

        this.TreeView1.Nodes.Clear();
        initTree(
    0,(TreeNode)null
    );
    }




    /// <summary>
    /// 保存权限的设置
    /// </summary>

    /// <param name="sender"></param>
    /// <param name="e"></param>

    private void BtnSure_Click(object sender, System.EventArgs e)
    {
        
    //先删除原来权限的设置

        string strSql = "delete from EPM_PowerList where empid="+ViewState["UserId"].ToString();
        connE.runSqlOnly(strSql);
        
    //重新设置权限

        SaveTree();
        connE.Alert(
    "保存成功!"
    ,Page);

        
    //重新在服务器端初始权限信息

        InitData();
        
    }


    /// <summary>
    /// 保存树中已选择的节点
    /// </summary>


    protected void SaveTree()
    {
        
    //获得所有已经选择的接点

        string strSelected = string.Empty;
        strSelected 
    = this
    .checkedNodes.Value;
        
    if(strSelected != string
    .Empty)
        
    {
            strSelected 
    = strSelected.Substring(0,strSelected.Length-1
    );
            
    string [] strSelecteds  = strSelected.Split(','
    );
            
    foreach(string str in
     strSelecteds)
            
    {
                
    string strSql = "insert EPM_PowerList (EMPid,deptid) values ('"+ViewState["UserId"].ToString()+"','"+str+"')"
    ;
                connE.runSqlOnly(strSql);
            }

        }

        
    }

  • 相关阅读:
    基于android混合开发的JsBridge技术学习
    使用centos引导内核错误:kernel: pnp 00:0b: can't evaluate _CRS: 8
    mysql的错误:The server quit without updating PID file /usr/local/mysql/data/door.pid).
    关于新的man版本出现“无法解析 /usr/share/man/zh_CN/man1/ls.1.gz: 没有那个文件或目录“
    使用struts2标签<s:action无法显示引用页面问题
    cookie 跨域的问题
    mysql8.0 在window环境下的部署与配置
    webconfig的配置解析
    C#.net 创建XML
    HashMap和HashTable的区别
  • 原文地址:https://www.cnblogs.com/newwind521/p/469890.html
Copyright © 2011-2022 走看看