Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Свойство ObjectDataSource.UpdateMethod

 

Опубликовано: Октябрь 2016

Возвращает или задает имя метода или функции, ObjectDataSource элементом управления для обновления данных.

Пространство имен:   System.Web.UI.WebControls
Сборка:  System.Web (в System.Web.dll)

public string UpdateMethod { get; set; }

Значение свойства

Type: System.String

Строка, представляющая имя метода или функции, которая ObjectDataSource использует для обновления данных. Значение по умолчанию - пустая строка.

ObjectDataSource Управления предполагает, что метод, который определяется параметром UpdateMethod свойство выполняет обновления одной за раз, а не в пакете.

UpdateMethod Делегирует свойство UpdateMethod свойство ObjectDataSourceView объекта, который связан с ObjectDataSource управления.

Убедитесь, что имена параметров настройки для ObjectDataSource элемента управления UpdateParameters коллекции совпадают с именами столбцов, возвращаемых метод select.

Метод, который определяется параметром UpdateMethod свойство может быть методом экземпляра или static (Shared в Visual Basic) метод. Если это метод экземпляра, бизнес-объект создается и уничтожается при каждом метод, который задается параметром UpdateMethod вызывается свойство. Можно обработать ObjectCreated и ObjectCreating событий для работы с бизнес-объект перед вызовом метода, который задается параметром UpdateMethod вызывается свойство. Можно также обрабатывать ObjectDisposing событие, возникающее после метода, который задается параметром UpdateMethod вызывается свойство. Если бизнес-объект реализует интерфейс IDisposable интерфейс, Dispose метод вызывается перед уничтожением объекта. Если метод является static (Shared в Visual Basic), бизнес-объекта не создается и не может обрабатывать ObjectCreated, ObjectCreating, и ObjectDisposing события.

Параметры добавляются в UpdateParameters коллекцию из трех источников:

  • Из элемента управления с привязкой к данным, во время выполнения.

  • Из UpdateParameters элемент, декларативно.

  • Из Updating обработчик событий программными средствами.

Во-первых, добавляются любые параметры, которые будут созданы на основе элементов управления с привязкой к данным UpdateParameters коллекции. Например если ObjectDataSource привязан элемент управления GridView управления, который имеет столбцы Name и Number, параметры Name и Number добавляются в коллекцию. Точное имя параметра зависит OldValuesParameterFormatString свойство. Тип данных этих параметров — string. Далее, параметры, которые перечислены в UpdateParameters добавляются элемент. Если параметр в UpdateParameters найден элемент с тем же именем в качестве параметра, который уже присутствует в UpdateParameters коллекции существующий параметр изменяется в соответствии с параметром, который задается в UpdateParameters элемент. Как правило это используется для изменения типа данных в качестве параметра. Наконец, можно программно добавлять и удалять параметры в Updating событие, которое происходит перед Update выполнения метода. Метод разрешается после слияния параметров. Разрешение метода рассматривается в следующем разделе.

System_CAPS_security Безопасность Примечание

Следует проверить все значения параметров, полученные от клиента. Среда выполнения просто подставляет значение параметра в UpdateMethod свойство.

При Update вызове метода, поля данных из элемента управления с привязкой к данным, параметры, созданные декларативно в UpdateParameters элемент и параметры, которые были добавлены в Updating обработчик события будут объединены. (Дополнительные сведения см. в предыдущем разделе.) ObjectDataSource Управления затем пытается найти метод для вызова. Во-первых, он ищет один или несколько методов с именем, которая указана в UpdateMethod свойство. Если совпадение не найдено, InvalidOperationException исключение. Если совпадение найдено, он затем ищет совпадение имен. Например, предположим, что тип, который задается параметром TypeName свойство имеет два метода с именем UpdateARecord. Один UpdateARecord имеет один параметр ID, а другой UpdateARecord имеет два параметра Name и Number. Если UpdateParameters коллекция имеет только один параметр с именем ID, UpdateARecord метод просто ID именем параметра. При разрешении методов тип параметра не проверяется. Порядок параметров не имеет значения.

Если DataObjectTypeName свойство задано, метод разрешается по-разному. ObjectDataSource Ищет метод с именем, которая указана в UpdateMethod свойство, которое принимает один параметр типа, который указан в DataObjectTypeName свойство. В этом случае имя параметра не имеет значения.

В следующих трех примерах веб-страницы, класс фонового кода страницы и класс доступа к данным, позволяющий пользователю извлечь и обновить записи в таблицу Employees базы данных Northwind.

В первом примере веб-страницы, которая содержит два ObjectDataSource элементов управления, DropDownList элемента управления и DetailsView элемента управления. Первый ObjectDataSource управления и DropDownList управления используются для извлечения и отображения имен сотрудников из базы данных. Второй ObjectDataSource управления и DetailsView управления используются для извлечения, отображения и изменения данных из записи, выбранной пользователем.

<form id="Form1" method="post" runat="server">

    <asp:objectdatasource
      ID="ObjectDataSource1"
      runat="server"
      SelectMethod="GetFullNamesAndIDs"
      TypeName="Samples.AspNet.CS.EmployeeLogic" />

    <p>
    <asp:dropdownlist
      ID="DropDownList1"
      runat="server" 
      DataSourceID="ObjectDataSource1"
      DataTextField="FullName"
      DataValueField="EmployeeID" 
      AutoPostBack="True" 
      AppendDataBoundItems="true">
        <asp:ListItem Text="Select One" Value=""></asp:ListItem>
    </asp:dropdownlist>
    </p>

    <asp:objectdatasource
      ID="ObjectDataSource2"
      runat="server"
      SelectMethod="GetEmployee"
      UpdateMethod="UpdateEmployeeAddress"
      OnUpdating="EmployeeUpdating"
      OnSelected="EmployeeSelected"
      TypeName="Samples.AspNet.CS.EmployeeLogic" >
      <SelectParameters>
        <asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
      </SelectParameters>
    </asp:objectdatasource>

    <asp:DetailsView
        ID="DetailsView1"
        runat="server"
        DataSourceID="ObjectDataSource2" 
        AutoGenerateRows="false"
        AutoGenerateEditButton="true">  
        <Fields>
            <asp:BoundField HeaderText="Address" DataField="Address" />
            <asp:BoundField HeaderText="City" DataField="City" />
            <asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
        </Fields>  
    </asp:DetailsView>

</form>

Второй пример показывает обработчики для Selected и Updating события. Selected Обработчик событий сериализует объект, содержащий данные, полученные из таблицы Employee. Сериализованный объект сохраняется в состоянии представления. Updating Обработчик событий выполняет десериализацию объекта в состоянии представления, содержащего исходные данные для записи данных, которая обновляется. Объект, содержащий исходные данные, передается как параметр методу Update. Исходные данные должны передаваться в базу данных, чтобы он может использоваться для проверки того, были ли данные изменены другим процессом.

public void EmployeeUpdating(object source, ObjectDataSourceMethodEventArgs e)
{
    DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));

    String xmlData = ViewState["OriginalEmployee"].ToString();
    XmlReader reader = XmlReader.Create(new StringReader(xmlData));
    Employee originalEmployee = (Employee)dcs.ReadObject(reader);
    reader.Close();

    e.InputParameters.Add("originalEmployee", originalEmployee);
}

public void EmployeeSelected(object source, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue != null)
    {
        DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));
        StringBuilder sb = new StringBuilder();
        XmlWriter writer = XmlWriter.Create(sb);
        dcs.WriteObject(writer, e.ReturnValue);
        writer.Close();

        ViewState["OriginalEmployee"] = sb.ToString();
    }
}

В третьем примере класс доступа к данным, который взаимодействует с базой данных "Борей". Класс использует LINQ для запроса и обновления таблицы Employees. В этом примере требуется класс LINQ to SQL, представляющий таблицу Employees и базы данных Northwind. Дополнительные сведения см. в разделе Практическое руководство: создание классов LINQ to SQL в веб-проекте.

public class EmployeeLogic
{
    public static Array GetFullNamesAndIDs()
    {
        NorthwindDataContext ndc = new NorthwindDataContext();

        var employeeQuery =
            from e in ndc.Employees
            orderby e.LastName
            select new { FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID };

        return employeeQuery.ToArray();
    }

    public static Employee GetEmployee(int empID)
    {
        if (empID < 0)
        {
            return null;
        }
        else
        {
            NorthwindDataContext ndc = new NorthwindDataContext();
            var employeeQuery =
                from e in ndc.Employees
                where e.EmployeeID == empID
                select e;

            return employeeQuery.Single();
        }
    }

    public static void UpdateEmployeeAddress(Employee originalEmployee, string address, string city, string postalcode)
    {
        NorthwindDataContext ndc = new NorthwindDataContext();
        ndc.Employees.Attach(originalEmployee, false);
        originalEmployee.Address = address;
        originalEmployee.City = city;
        originalEmployee.PostalCode = postalcode;
        ndc.SubmitChanges();
    }
}

.NET Framework
Доступно с 2.0
Вернуться в начало
Показ: