Я нахожу, что ответ Мухаммеда Ахтара почти точен, за исключением того, что мне нужно немного изменить условие 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;
}