根据用户授权禁用复选框列

时间:2015-08-10 17:32:26

标签: c# gridview checkbox

我有一个网格,在网格中我有两个项目模板列 - 复选框1和复选框2 我想根据用户是管理员还是普通用户来禁用整个Checkbox 1列 因此,如果用户是“管理员”,我希望启用两个列,用户可以选中/取消选中这两列。
但是,如果用户是“普通用户”,我想禁用“Checkbox1”,以便用户只能选中/取消选中Checkbox 2.但是可以查看“Checkbox 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;
            }
        }
    }  

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

1 个答案:

答案 0 :(得分:0)

取决于您的网格视图的设置方式,您可以尝试禁用对列的编辑或将其设置为只读。

您还可以简单地将用户状态保存在会话变量中,这样您只需要第一次进行数据库调用,这也可以加快整个过程。

使用会话变量看起来像:

 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;
        }
    }
}