我有一个网格,在网格中我有两个项目模板列 - 复选框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列?
答案 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;
}
}
}