在权限管理中要设置用户的权限:
具体是通过勾选住checkbox复选框(几十个)来实现的。
将勾选住的复选框的值循环插入数据库,在选择用户的时候把该用户所拥有的权限读取出来以复选框的形式显示出来。
这个过程怎么实现啊?
请大家多多指点,多谢各位!

解决方案 »

  1.   

    用JS 先把值传入hidden,在后台就可以hidden.value得到了
      

  2.   

    http://topic.csdn.net/u/20090723/14/150fdc5f-f289-44d4-a4b8-96fdcff16af8.html
      

  3.   

    可以考虑用treeview,这样简单很多,当然也可以用其他方式,如楼上所有说的,先将被选中的值放到隐藏控件,然后解析存入数据库
    给个TREEVIEW的参考
    protected void btnSave_Click(object sender, EventArgs e)
            {
                foreach (TreeNode tn in tvUsers.Nodes)
                {
                    string value = tn.Value;
                    if (tn.Checked && value.Substring(0, 1) != "d")
                    {
                        strText += tn.Text + ",";
                        strValue += value + ",";
                    }
                    getTreeViewSelectValue(tn);
                }
                strValue = strValue.TrimEnd(',');
                if (BLL.SystemManager.SystemManager_Role.DeleteUserRoleByRoleId(ViewState["roleId"].ToString()))
                if (strValue != "")
                {
                    BLL.SystemManager.SystemManager_Role.InsertUserRole(strValue.Split(','), ViewState["roleId"].ToString());
                }
                this.Page.RegisterStartupScript("", "<script>window.close();</script>");
            }        //初始化树
            private void InitTreeview(DataTable dtSelect)
            {
                this.tvUsers.Nodes.Clear();
                DataTable dt = SystemManeger_Department.GetChidDepartment("0");
                DataTable dtUser = SystemManager_Users.GetUsersBydeptId("0");//用户            
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dt.Rows[i]["deptId"].ToString();
                    tn.Text = dt.Rows[i]["deptName"].ToString();
                    tn.Value = "d" + id;
                    tn.NavigateUrl = "#";
                    tn.ShowCheckBox = true;
                    tvUsers.Nodes.Add(tn);
                    addTreeNode(tn, SystemManeger_Department.GetChidDepartment(id), dtSelect, SystemManager_Users.GetUsersBydeptId(id));
                }
                for (int i = 0; i < dtUser.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dtUser.Rows[i]["userId"].ToString();
                    tn.Text = dtUser.Rows[i]["empName"].ToString();
                    tn.Value = id;
                    tn.NavigateUrl = "#";
                    tn.ShowCheckBox = true;
                    if (dtSelect.Select("userId=" + id).GetLength(0) > 0)
                    {
                        tn.Checked = true;
                    }
                    else
                    {
                        tn.Checked = false;
                    }
                    tvUsers.Nodes.Add(tn);
                }
            }
            //递归初始树
            private void addTreeNode(TreeNode tnParent, DataTable dtTreeNode, DataTable dtTreeNodeSelect, DataTable dtTreeNode_1)
            {
                for (int i = 0; i < dtTreeNode.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dtTreeNode.Rows[i]["deptId"].ToString();
                    tn.Text = dtTreeNode.Rows[i]["deptName"].ToString();
                    tn.Value = "d" + id;
                    tn.NavigateUrl = "#";
                    tn.ShowCheckBox = true;
                    tnParent.ChildNodes.Add(tn);
                    addTreeNode(tn, SystemManeger_Department.GetChidDepartment(id), dtTreeNodeSelect, SystemManager_Users.GetUsersBydeptId(id));
                }
                for (int i = 0; i < dtTreeNode_1.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dtTreeNode_1.Rows[i]["userId"].ToString();
                    tn.Text = dtTreeNode_1.Rows[i]["empName"].ToString();
                    tn.Value = id;
                    tn.NavigateUrl = "#";
                    tn.ShowCheckBox = true;
                    if (dtTreeNodeSelect.Select("userId=" + id).GetLength(0) > 0)
                    {
                        tn.Checked = true;
                    }
                    else
                    {
                        tn.Checked = false;
                    }
                    tnParent.ChildNodes.Add(tn);
                }
            }
            //递归获取被选择的用户
            private void getTreeViewSelectValue(TreeNode tn)
            {
                foreach (TreeNode tnChild in tn.ChildNodes)
                {
                    string value = tnChild.Value;
                    if (tnChild.Checked && value.Substring(0, 1) != "d")
                    {
                        strValue += value + ",";
                        strText += tnChild.Text + ",";
                    }
                    getTreeViewSelectValue(tnChild);
                }
            }
      

  4.   

    //初始化树
            private void InitTreeview(string roleId)
            {
                this.tvPopedom.Nodes.Clear();
                DataTable dt = SystemManager_Role.GetPopedomByParentId("0");
                DataTable dtUserRole = SystemManager_Role.GetRolePopedomByRoleId(roleId);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dt.Rows[i]["popedomId"].ToString();
                    tn.Text = dt.Rows[i]["popedomDesc"].ToString();
                    tn.Value = id;
                    tn.ShowCheckBox = true;
                    if (dtUserRole.Select("popedomId=" + id).GetLength(0) > 0)//用户具有权限
                    {
                        tn.Checked = true;
                    }
                    else
                    {
                        tn.Checked = false;
                    }
                    tvPopedom.Nodes.Add(tn);
                    addTreeNode(tn, SystemManager_Role.GetPopedomByParentId(id), dtUserRole);
                }            
            }
            //
            protected void btnSave_Click(object sender, EventArgs e)
            {
                string roleId = ViewState["id"].ToString();
                foreach (TreeNode tn in tvPopedom.Nodes)
                {
                    if (tn.Checked)//还要考虑系统管理员不能去掉自己的权限管理
                    {
                        myArrList.Add(tn.Value);
                    }
                    getTreeViewSelectValue(tn);
                }
                if (!myArrList.Contains("7") && SystemManager_Users.GetUserRole(Session["userId"].ToString()).Tables[0].Select("roleId=" + roleId).GetLength(0) > 0)//系统管理员不有将自己角色的权限设为非系统管理员
                {
                    myArrList.Add("7");
                }
                this.Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('" + SystemManager_Role.AddRolePopedom(roleId, myArrList) + "');window.close();</script>");
                Common.SafeHandling.CreateOperateLog("更新角色权限关系");//写日志
            }
            //递归初始经树
            private void addTreeNode(TreeNode tnParent, DataTable dtPopedom, DataTable dtUserRole)
            {
                for (int i = 0; i < dtPopedom.Rows.Count; i++)
                {
                    TreeNode tn = new TreeNode();
                    string id = dtPopedom.Rows[i]["popedomId"].ToString();
                    tn.Text = dtPopedom.Rows[i]["popedomDesc"].ToString();
                    tn.Value = id;
                    tn.ShowCheckBox = true;
                    if (dtUserRole.Select("popedomId=" + id).GetLength(0) > 0)//用户具有权限
                    {
                        tn.Checked = true;
                    }
                    else
                    {
                        tn.Checked = false;
                    }
                    tnParent.ChildNodes.Add(tn);
                    addTreeNode(tn, SystemManager_Role.GetPopedomByParentId(id), dtUserRole);
                }
            }
            //递归获取用户选择的项
            private void getTreeViewSelectValue(TreeNode tn)
            {
                foreach (TreeNode tnChild in tn.ChildNodes)
                {
                    if (tnChild.Checked)//还要考虑系统管理员不能去掉自己的权限管理
                    {
                        myArrList.Add(tnChild.Value);
                    }
                    getTreeViewSelectValue(tnChild);
                }
            }这个更像点
      

  5.   

    给你一个简单的方法/// <summary>
        /// 显示数据记录
        /// </summary>
        /// <param name="dtRecord">数据源</param>
        /// <param name="recordBegin">记录开始位置</param>
        /// <param name="recordEnd">记录结束位置</param>
        /// <returns>HTML字符串</returns>
        private string DisplayDataRecord(DataTable dtRecord, int recordBegin, int recordEnd)
        {
            string html = "";
            try
            {
                for (int i = recordBegin; i <= recordEnd; i++)
                {
                    //显示数据记录的内容
                    string RowID = ds.Tables[0].Rows[i]["ReportID"].ToString();
                    string trID = "Row" + RowID;                html += ("<tr id ='" + trID + "' bgcolor='white' style='font-size:13px' height=25px onmouseover=\"javascript:this.style.backgroundColor='#ccffcc'\" onmouseout=\"javascript:this.style.backgroundColor='white'\">");
                    html += ("<td  height=25px align=left width=20px> <img src='Image/fayan.gif'></td>");                string reportID = "Rownum" + i;
                    html += "<td id ='" + reportID + "' style='display:none'>" + RowID + "</td>";                string strReportId = "ReportName" + i;
                    html += "<td id ='" + strReportId + "' height=25px align='left' width=300px>" + dtRecord.Rows[i]["ReportName"].ToString() + "</td>";                if ((i < 4) || i == 5)
                    {
                        string strIsWriteId = "IsWrite" + i;
                        if (dtRecord.Rows[i]["IsWrite"].ToString() == "0")
                        {
                            html += "<td  height=25px width=80px align=center><input id ='" + strIsWriteId + "' type='checkbox' onclick ='IsWrite(this)' /></td>";
                        }
                        else
                        {
                            html += "<td height=25px width=80px align=center><input id ='" + strIsWriteId + "' type='checkbox' checked='checked' onclick ='IsWrite(this)' /></td>";
                        }
                    }
                    else
                    {
                        string strIsWriteId = "IsWrite" + i;                    html += "<td  height=25px width=80px  align=center><input id ='" + strIsWriteId + "'type='checkbox' disabled='disabled' /></td>";
                       
                    }                if ((i < 4) || i == 5)
                    {
                        string strIsSeeId = "IsSee" + i;
                        html += "<td  height=25px width=80px  align=center><input id ='" + strIsSeeId + "'type='checkbox' disabled='disabled' /></td>";                    string strIsUpdateId = "IsUpdate" + i;
                        html += "<td  height=25px width=80px  align=center><input id ='" + strIsUpdateId + "'type='checkbox' disabled='disabled' /></td>";
                    }
                    else
                    {
                        string strIsSeeId = "IsSee" + i;
                        if (dtRecord.Rows[i]["IsSee"].ToString() == "0")
                        {
                            html += "<td height=25px width=80px  align=center><input id ='" + strIsSeeId + "' type='checkbox' onclick ='IsSee(this)' /></td>";
                        }
                        else
                        {
                            html += "<td height=25px width=80px  align=center><input id ='" + strIsSeeId + "' type='checkbox' checked='checked' onclick ='IsSee(this)' /></td>";
                        }                    string strIsUpdateId = "IsUpdate" + i;
                        if (dtRecord.Rows[i]["IsUpdate"].ToString() == "0")
                        {
                            html += "<td height=25px width=80px'  align=center><input id ='" + strIsUpdateId + "' type='checkbox' onclick ='IsUpdate(this)' /></td>";
                        }
                        else
                        {
                            html += "<td height=25px width=80px  align=center><input id ='" + strIsUpdateId + "'  type='checkbox' checked='checked' onclick ='IsUpdate(this)' /></td>";
                        }
                    }
                                    html += "</tr>";
                }            return html;
            }
            catch (Exception ex)
            {
                lg = new LogWrite(className);
                lg.WriteDebugLog("DisplayDataRecord()", ex.ToString());
                return "";
            }
        }/*-------------------------------------------------------------------------------------------------------------------------------------------
        把修改的权限数据放到数据库中
    ---------------------------------------------------------------------------------------------------------------------------------------------*/
    function Save()
    {
        for (var i = 0;i< tb1.rows.length-1;i++)
        {
            
            // 取得报表的ID       
            var rowID = document.getElementById("Rownum"+i).innerText;
            
            //获取录入权限的值        var IsWrite =  document.getElementById("IsWrite" + i).checked.toString();
            if (IsWrite == "true")
            {
                IsWrite = "1";
            }
            else
            {
                IsWrite = "0";
            }
            
            //获取查看权限的值        var IsSee =  document.getElementById("IsSee" + i).checked.toString();
            if (IsSee == "true")
            {
                IsSee = "1";
            }
            else
            {
                IsSee = "0";
            }
            
            //获取修改权限的值        var IsUpdate =  document.getElementById("IsUpdate" + i).checked.toString();
            if (IsUpdate == "true")
            {
                IsUpdate = "1";
            }
            else
            {
                IsUpdate = "0";
            }
            Admin_WebRPTAuthority.SaveDate(rowID,IsWrite,IsSee,IsUpdate,varuserID).value;
            
            
        }
        
        alert("保存成功"); 
     
                   
    }
      

  6.   

    foreach(TreeNode no  in this.tvMenu.Nodes) 
                { 
                    GetTree(no); 
                    GetChildTree(no); 
                } 
    private void GetTree(TreeNode node) 
            { 
                if (node.Checked == true) 
                { 
                  int i=int.Parse(node.Value.ToString().Trim());                
                }         } 
    rivate void GetChildTree(TreeNode node) 
            { 
                foreach (TreeNode nd in node.ChildNodes) 
                { 
                    if (nd.Checked) 
                    { 
                    
                    } 
                    if(nd.ChildNodes.Count >0) 
                        GetChildTree(nd); 
                } 
            }
      

  7.   

    谢谢大家的回答!
    我现在想知道怎样才能在后台将从数据库中读取出来的权限值与checkbox的value值作比较如果两个值相同就让该checkbox选中。我现在在后台无法找到前台的checkbox,无法循环读取。
    代码如下:
    protected void ddlSubUserList_SelectedIndexChanged(object sender, EventArgs e)
        {
            UserAccessBLL bll = new UserAccessBLL();
            string userId = ddlSubUserList.SelectedItem.Value.ToString();
            List<Acs_UserAccess> uaList = bll.GetUserAccessByUserId(Convert.ToInt32(userId));
            for (int i = 0; i < uaList.Count; i++)
            {
                foreach (Control ct in form1.Controls)
                {
                    if (ct.GetType().ToString().Equals("System.Web.UI.HtmlControls.HtmlInputCheckBox"))
                    {
                        HtmlInputCheckBox cb = (HtmlInputCheckBox)ct;
                        if ((cb.Value.ToString()).Equals((uaList[i].ToString())))
                        {
                            cb.Checked = true;
                        }
                    }
                }
            }
        }
    该代码走到第一个if语句:
    if (ct.GetType().ToString().Equals("System.Web.UI.HtmlControls.HtmlInputCheckBox"))
    就不走了,进入不到if里。
    请问大家这是怎么回事啊?