Как вручную изменить связанный объект с помощью FormView? - PullRequest
0 голосов
/ 31 июля 2009

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 04 февраля 2012

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

Решение состоит в том, чтобы использовать событие обновления 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;
}
1 голос
/ 31 июля 2009

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

1 голос
/ 31 июля 2009

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

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

0 голосов
/ 31 июля 2009

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

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

...