Как проверить комбинированное изменение RowState '| Изменить 'в RowDataBound?

На моей странице я настроил GridView с несколькими столбцами. Я закодировал метод обновления, удаления и вставки. Хотя мой GridView связывает свои данные, вызывается следующий метод:

protected void GridViewAutomat_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if(e.Row.RowState != DataControlRowState.Edit)
        { 
            //some code

        }
    }
}

Проблема с моим вторым оператором if заключается в том, что когда мой GridView входит в режим редактирования (когда я хочу обновить запись в моем GridView), он не перехватывает RowState Альтернативный | Изменить, который выглядит следующим образом (вот как RowState после того, как я вызываю мой метод обновления):

Когда я пытаюсь объединить два RowStates отдельно, это тоже не сработает:

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

Код в операторе if должен выполняться, когда строка не находится в режиме редактирования (Alternate | Edit), поэтому у меня есть != как оператор

Кто-нибудь знает, как я могу поймать комбинированный режим Alternate | Редактировать и режим редактирования вместе?

3 ответа

Вы можете проверить это в:

  • Режим редактирования:

    e.Row.RowState != DataControlRowState.Edit
    
  • Альтер | Режим редактирования:

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

В обход:

if (e.Row.RowType == DataControlRowType.DataRow &&
    e.Row.RowState != DataControlRowState.Edit && 
    e.Row.RowState != (DataControlRowState.Edit | DataControlRowState.Alternate))
{ 
    //... Here is logic
}

Или же:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    if (e.Row.RowState != DataControlRowState.Edit && 
        e.Row.RowState != (DataControlRowState.Edit | DataControlRowState.Alternate))
    {
        //... here is logic
    }
}

В RowState ценность - это DataControlRowState перечисление, которое имеет Flagsнабор атрибутов. Это означает, что мы можем позвонить Enum.HasFlag, вот так:

if (e.Row.RowType == DataControlRowType.DataRow &&
    e.Row.RowState.HasFlag(DataControlRowState.Edit))
{ 
    //... Here is logic
}

Уже предоставленные ответы, вероятно, легче читать людям, которые не используют много побитовых операторов в повседневной жизни. Однако альтернативой может быть использование бинарного логического И. &, используя то, что RowState является побитовым свойством:

              if (!((e.Row.RowState & DataControlRowState.Edit) > 0))
        { 
            //some code - Executed when RowState is NOT Edit
        }

Обратите внимание, что приведенный выше пример фрагмента кода запускает блок кода, когда состояние строки НЕ находится в режиме редактирования, в соответствии с исходной ситуацией постера. Если вам нужно выполнить код, когда состояние строки находится в режиме редактирования, просто удалите!отрицание, т.е.if (((e.Row.RowState & DataControlRowState.Edit) > 0)).

Отдайте должное одному из ответов в этой ветке MSDN , который привел меня к этому решению.

Другие вопросы по тегам