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

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

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

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

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


person Bob    schedule 31.07.2009    source источник
comment
См. Также stackoverflow.com/questions/1075166/   -  person Robert Harvey    schedule 31.07.2009
comment
Это не то, что я пытаюсь сделать. Это сработает при заполнении формы, но я хочу изменить свой объект до вызова метода обновления.   -  person Bob    schedule 31.07.2009


Ответы (4)


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

person Robert Harvey    schedule 31.07.2009
comment
Есть такой пример? Я не уверен, что это то, что я пытаюсь достичь - person Bob; 31.07.2009

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

Решение состоит в том, чтобы использовать событие обновления 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;
}
person Lou Valentine    schedule 04.02.2012

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

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

person maxbeaudoin    schedule 31.07.2009

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

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

person Robert Harvey    schedule 31.07.2009
comment
Я не хочу получать доступ к публикуемым данным, я хочу получить доступ к фактическому объекту, который будет отправлен в метод Update ObjectDataSource, чтобы я мог установить для него какое-то поле. - person Bob; 31.07.2009
comment
К тому времени уже слишком поздно. Вы должны захватить его до того, как произойдет привязка данных. Если вы не хотите просто прочитать его из базы данных или бизнес-объекта постфактум, внесите изменения и затем запишите их обратно. - person Robert Harvey; 31.07.2009