Иногда вы можете столкнуться с проблемой, когда имена свойств вашего класса данных не соответствуют точно именам параметров метода обновления. Если все, что вам нужно — это простая работа по переименованию, то следует выполнить задачу, описанную выше в разделе "Обновление с помощью хранимых процедур", хотя синтаксис будет слегка отличаться.
Во-первых, вы определяете необходимые дополнительные параметры с корректными именами. Например, может быть, придется переименовать свойство EmployeeDetails.EmployeeID в параметр по имени id в методе обновления. Вот необходимый новый параметр:
<asp:ObjectDataSource ID="sourceEmployees" runat="server"
TypeName="DatabaseGomponent.EmployeeDB" SelectMethod="GetEmployees"
UpdateMethod="UpdateEmployee" OnUpdating="sourceEmployees_Updating" >
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSourc«>
Во-вторых, нужно отреагировать на событие ObjectDataSource.Updating, установив значение этого параметра и удалив тот, который не нужен:
protected void sourceEmployees_Updating(object sender,
ObjectDataSourceMethodEventArgs e)
{
e.InputParameters["id"] = e.InputParameters["EmployeeID"];
e.InputParameters.Remove("EmployeeID");
}
Совет. Тот же подход, что использован для обновления, применяется при выполнении вставок и удалений. Единственное отличие состоит в том, что нужно обработать события Inserting и Deleting соответственно.
Можно использовать тот же подход для добавления дополнительных параметров. Например, если ваш метод Требует параметра с информацией, которая не содержится в привязанном элементе управления данными, просто определите его как один из параметров UpdateParameters и установите значение, когда произойдет событие ObjectDataSource.Updating.
Если вы еще более амбициозны, то можете даже решить программно указать ObjectDataSource другой метод обновления из того же класса:
sourceEmployees.UpdateMethod = "UpdateEmployeeStrict";
Ниже в этой главе, в разделе "Ограничения элементов управления источниками данных" такой подход будет применен для решения часто возникающей проблемы.
Фактически, если быть еще более смелым, то можно установить свойство ConflictDetection в значение ConflictOptions.CompareAllValues — так что старое и новое значения будут подтверждены в коллекции UpdateParameters. Затем можно проверить эти параметры, определить, какие поля были изменены, и вызывать разные методы (с соответствующими разными наборами параметров). К сожалению, этот сценарий не позволяет обойтись без кодирования, и вам придется писать громоздкий код для обновления й удаления параметров. Однако это предоставляет существенный дополнительный уровень гибкости.
предыдущая следующая страница оглавление
412