Как вручную изменить связанный объект с помощью FormView?
-
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 соответствующего элемента управления.