Обработка нестандартных сигнатур методов

Иногда вы можете столкнуться с проблемой, когда имена свойств вашего класса данных не соответствуют точно именам параметров метода обновления. Если все, что вам нужно — это простая работа по переименованию, то следует выполнить задачу, описанную выше в разделе "Обновление с помощью хранимых процедур", хотя синтаксис будет слегка отличаться.

Во-первых, вы определяете необходимые дополнительные параметры с корректными именами. Например, может быть, придется переименовать свойство 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

Hosted by uCoz