Как проверить комбинированное изменение 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 , который привел меня к этому решению.