Как вручную изменить связанный объект с помощью FormView?

StackOverflow https://stackoverflow.com/questions/1214122

  •  06-07-2019
  •  | 
  •  

Вопрос

Я использую FormView с ObjectDataSource. Когда нажата кнопка «Сохранить», я бы хотел изменить связанный с данными объект, прежде чем он будет установлен на метод обновления ObjectDataSources.

Я пробовал событие обновления FormView, а также событие обновления источника данных объекта, но не могу понять, как получить доступ к объекту, связанному с данными. FormView.DataItem является нулевым в этих событиях.

Или, другими словами, я хотел бы перехватить и изменить DataItem, прежде чем он будет передан ObjectDataSource UpdateMethod.

Чтобы немного подробнее рассказать о том, почему я хочу это сделать, в форме есть некоторые значения, которые нельзя связать данными со встроенной функциональностью. Одним из элементов управления является список флажков. Я использую событие DataBinding для заполнения проверок, но теперь мне также нужен способ обновить мой объект, чтобы отразить значения формы. Есть и другие элементы управления с похожими ситуациями.

Это было полезно?

Решение

Почему бы вам просто не написать свой собственный бизнес-объект (он же ObjectDataSource) и обернуть оригинальный объект ObjectDataSource? Затем вы можете перехватить все, что захотите, и изменить его в соответствии с методом Save исходного объекта ObjectDataSource.

Другие советы

Я знаю, что это старый вопрос, но у меня была та же проблема, и я нашел ответ, который, как мне кажется, ищет Боб.

Решением является использование в веб-форме события обновления ObjectDataSource. Событие Updating включает объект ObjectDataSourceMethodEventArgs в качестве параметра. Класс ObjectDataSourceMethodEventArgs включает в себя свойство с именем " InputParameters " и его можно использовать для доступа к объекту данных и изменения содержимого до того, как произойдет обновление. Сначала необходимо преобразовать объект InputParameters в тип OrderedDictionary (полное пространство имен - System.Collections.Specialized.OrderedDictionary)

Это выглядит примерно так:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

DataItem доступен только при привязке данных.
Затем данные привязываются к элементам управления внутри вашего FormView.
Используйте myFormView.FindControl (идентификатор строки) для доступа к связанным значениям перед обновлением.

Если двусторонняя привязка данных не сработает, вам нужно создать экземпляр объекта, вручную заполнить свойства, а затем обновить или зафиксировать изменения.

Поскольку вы находитесь в событии Updating, FormView.DataItem имеет значение null, поскольку привязка данных еще не произошла. Вы должны получить доступ к данным через элемент управления формы, содержащий ваши данные.

Попробуйте применить изменение данных во время события OnDataBinding соответствующего элемента управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top