【问题标题】:Disable checkbox column based on user authorization根据用户授权禁用复选框列
【发布时间】:2015-08-11 01:52:44
【问题描述】:

我有一个网格,在网格中有两个项目模板列 - 复选框 1 和复选框 2。
我想根据用户是管理员还是普通用户禁用整个 Checkbox 1 列。
比如说,如果用户是“管理员”,我希望启用两列,并且用户可以选中/取消选中这两列。
但是,如果用户是“普通用户”,我想禁用“Checkbox1”,以便用户只能选中/取消选中复选框 2。但可以看到“复选框 1”列的值并且无法对其进行编辑或更改。
目前,我正在实现以下行为 -

    protected void grdchkbox_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkbox1 = (e.Row.FindControl("Checkbox1") as CheckBox);
            if (IsGeneralUser(empid))
            {
                chkbox1.Enabled = false;
            }
        }
    }  

问题在于页面加载时间。
每次绑定一行时它都会检查用户的角色,这意味着在每行绑定时进行数据库调用。
此外,它还分别禁用了每一行的复选框。
有没有办法,我可以一次性禁用整个复选框 1 列?

【问题讨论】:

  • 您能否先检查用户是否处于某个角色,存储该值,然后根据该值启用或禁用该行?在绑定gridview之前?省去每行检查去数据库的需要?
  • 我的回答对你有帮助吗?
  • 感谢 psoshmo.. 它对我有用。 :)

标签: c# gridview checkbox


【解决方案1】:

根据您的 gridview 的设置方式,您可以尝试禁用对列的编辑或将其设为只读。

您也可以简单地将用户状态保存在会话变量中,这样您只需在第一次调用 db 时,这也应该加快整个过程。

使用会话变量看起来像:

 protected void grdchkbox_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chkbox1 = (e.Row.FindControl("Checkbox1") as CheckBox);
        //we check to see if we already have the users status saved in session
        var isUser = HttpContext.Current.Session["IsGeneralUser"];
        //if we dont, we run the IsGeneralUser method and save the result in session
        if(isUser == null)
        {
            isUser = IsGeneralUser(empid);
            HttpContext.Current.Session.Add("IsGeneralUser", isUser);
        }
        if (Convert.ToBoolean(isUser))
        {
            chkbox1.Enabled = false;
        }
    }
}  

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多