GridView模板列有条件地设置为只读

Bil*_*ult 2 c# asp.net gridview

有没有办法将GridView上的模板列设置为只读后面的代码.喜欢如果测试Admin=true make readonly= false else readonly = true

yan*_*liy 5

我发现穆罕默德·阿赫塔尔的答案几乎是现场,除非我需要在我的案例中略微改变if条款以涵盖所有条件.我的if子句如下.

if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit || 
    (e.Row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate)
Run Code Online (Sandbox Code Playgroud)

我没有发现原来的任何问题,直到我有一个特殊值为e.Row.RowState"Alternate | Edit",这使得

(e.Row.RowState == DataControlRowState.Edit || 
 e.Row.RowState == DataControlRowState.Alternate) == false
Run Code Online (Sandbox Code Playgroud)

不过,我应该感谢穆罕默德·阿赫塔尔指出我朝着正确的方向前进.

这是我的完整代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit || (e.Row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate)
   {
      TextBox txt = (TextBox)e.Row.FindControl("ControlID");
      txt.ReadOnly = true;
   }
}
Run Code Online (Sandbox Code Playgroud)

PS:为了使DropDownList只读,你需要在它的OnDataBound事件中禁用它:

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    ((DropDownList)sender).Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)