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

时间:2011-05-05 12:53:02

标签: c# asp.net gridview

有没有办法将GridView上的模板列设置为后面的代码只读。 就像测试Admin=true make readonly= false else readonly = true

一样

3 个答案:

答案 0 :(得分:5)

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

if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit || 
    (e.Row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate)

我发现原始版本没有任何问题,直到我将e.Row.RowState的特殊值作为“备用|编辑”,这使得

(e.Row.RowState == DataControlRowState.Edit || 
 e.Row.RowState == DataControlRowState.Alternate) == false

尽管如此,我应该感谢穆罕默德·阿赫塔尔指出我正确的方向。

这是我的完整代码:

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

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

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    ((DropDownList)sender).Enabled = false;
}

答案 1 :(得分:4)

没有直接的方法可以将GridView列设置为只读。但是,您可以将控件设置为RowDataBound GridView事件中该列中的只读控件。 e.g。

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

答案 2 :(得分:0)

是,点击ItemDataBound事件,对于每一行,使用只读控件和编辑控件并显示/隐藏作业的正确控件,或者禁用编辑控件。模板没有全局只读设置。

HTH。