Шаблон GridView Столбец условно установлен только для чтения - PullRequest
2 голосов
/ 05 мая 2011

Есть ли способ установить столбец шаблона в GridView для чтения только из кода позади. Как если бы тест для Admin=true make readonly= false else readonly = true?

Ответы [ 3 ]

5 голосов
/ 06 декабря 2012

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

Нет прямого способа установить столбец GridView только для чтения. Но вы можете установить элементы управления только для чтения, которые находятся в этом столбце в событии RowDataBound вашего GridView. например,

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;
    }
}
0 голосов
/ 05 мая 2011

Да, нажмите на событие ItemDataBound, и для каждой строки либо используйте элемент управления только для чтения и элемент управления для редактирования, чтобы показать / скрыть нужный элемент управления для задания, либо, альтернативно, отключите элемент управления для редактирования. Для шаблонов нет глобальной настройки только для чтения.

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...