Как избежать RowDataBound при редактировании GridView? - PullRequest
4 голосов
/ 14 сентября 2011

В настоящее время у меня есть следующий код в RowDataBound:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label groupID = (Label)e.Row.FindControl("idgroup");
            LinkButton myLink = (LinkButton)e.Row.FindControl("groupLink");
            myLink.Attributes.Add("rel", groupID.Text);
        }
}

Однако, когда я нажимаю на ссылку Изменить, он пытается запустить этот код и выдает ошибку.Следовательно, как я могу запустить этот код ТОЛЬКО, когда GridView находится в режиме чтения?Но не при редактировании ...

Ответы [ 5 ]

7 голосов
/ 15 сентября 2011

Вот как это сделать!Он будет выполнять код только над строками (в режиме чтения или редактирования), за исключением строки, которая редактируется !!!

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState == DataControlRowState.Normal) || (e.Row.RowState == DataControlRowState.Alternate))
            {
                Label groupID = (Label)e.Row.FindControl("idgroup");
                LinkButton myLink = (LinkButton)e.Row.FindControl("groupLink");
                myLink.Attributes.Add("rel", groupID.Text);
            }
        }
    }
6 голосов
/ 14 сентября 2011

вы можете добавить чек следующим образом:

if (e.Row.RowState != DataControlRowState.Edit)
{
  // Here logic to apply only on initial DataBinding...
}
2 голосов
/ 01 апреля 2012

Ответ Дэвиде является почти правильным. Однако он потерпит неудачу для альтернативных строк. Вот правильное решение:

if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit && e.Row.RowState != (DataControlRowState.Edit | DataControlRowState.Alternate))
{ 
    // Here logic to apply only on rows not in edit mode
}
2 голосов
/ 14 сентября 2011

Добавить чек на e.Row.RowState:

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    //In Edit mode
}
0 голосов
/ 14 сентября 2011

В вашем gridview, найдите событие OnrowDataBound, которое будет иметь вид OnrowDataBound = "GridView1_RowDataBound", удалить этот код и отключить приведенный выше код.

...