有没有办法将GridView上的模板列设置为后面的代码只读。
就像测试Admin=true make readonly= false else readonly = true
?
答案 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。