ObjectDataSource.UpdateMethod Propriété

Définition

Obtient ou définit le nom de la méthode ou de la fonction que le contrôle ObjectDataSource appelle pour mettre à jour des données.Gets or sets the name of the method or function that the ObjectDataSource control invokes to update data.

public:
 property System::String ^ UpdateMethod { System::String ^ get(); void set(System::String ^ value); };
public string UpdateMethod { get; set; }
member this.UpdateMethod : string with get, set
Public Property UpdateMethod As String

Valeur de propriété

Chaîne qui représente le nom de la méthode ou de la fonction que ObjectDataSource utilise pour mettre à jour des données.A string that represents the name of the method or function that the ObjectDataSource uses to update data. La valeur par défaut est une chaîne vide.The default is an empty string.

Exemples

Les trois exemples suivants illustrent une page Web, une classe de page code-behind et une classe d’accès aux données qui permettent à un utilisateur de récupérer et de mettre à jour des enregistrements dans la table Employees de la base de données Northwind.The following three examples show a Web page, a code-behind page class, and a data-access class that enable a user to retrieve and update records in the Employees table in the Northwind database.

Le premier exemple montre une page Web qui contient deux ObjectDataSource contrôles, un DropDownList contrôle et un DetailsView contrôle.The first example shows a Web page that contains two ObjectDataSource controls, a DropDownList control, and a DetailsView control. Le premier ObjectDataSource contrôle et le DropDownList contrôle sont utilisés pour récupérer et afficher les noms des employés à partir de la base de données.The first ObjectDataSource control and the DropDownList control are used to retrieve and display employee names from the database. Le deuxième ObjectDataSource contrôle et le DetailsView contrôle sont utilisés pour récupérer, afficher et modifier les données de l’enregistrement d’employé sélectionné par l’utilisateur.The second ObjectDataSource control and the DetailsView control are used to retrieve, display, and modify the data from the employee record that is selected by the user.

<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>
<form id="form1" 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>

Le deuxième exemple montre des gestionnaires pour les Selected événements Updating et.The second example shows handlers for the Selected and Updating events. Le Selected gestionnaire d’événements sérialise l’objet qui contient les données récupérées à partir de la table Employee.The Selected event handler serializes the object that contains data that was retrieved from the Employee table. L’objet sérialisé est stocké dans l’état d’affichage.The serialized object is stored in view state. Le Updating gestionnaire d’événements désérialise l’objet dans l’état d’affichage qui contient les données d’origine de l’enregistrement de données mis à jour.The Updating event handler deserializes the object in view state that contains the original data for the data record that is being updated. L’objet qui contient les données d’origine est passé en tant que paramètre à la méthode de mise à jour.The object that contains the original data is passed as a parameter to the Update method. Les données d’origine doivent être transmises à la base de données afin qu’elles puissent être utilisées pour vérifier si les données ont été modifiées par un autre processus.The original data must be passed to the database so that it can be used to check whether the data has been modified by another process.

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();
    }
}
Public Sub EmployeeUpdating(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs)
    Dim dcs As New DataContractSerializer(GetType(Employee))
    Dim xmlData As String
    Dim reader As XmlReader
    Dim originalEmployee As Employee

    xmlData = ViewState("OriginalEmployee").ToString()
    reader = XmlReader.Create(New StringReader(xmlData))
    originalEmployee = CType(dcs.ReadObject(reader), Employee)
    reader.Close()

    e.InputParameters.Add("originalEmployee", originalEmployee)
End Sub

Public Sub EmployeeSelected(ByVal source As Object, ByVal e As ObjectDataSourceStatusEventArgs)
    If e.ReturnValue IsNot Nothing Then
        Dim dcs As New DataContractSerializer(GetType(Employee))
        Dim sb As New StringBuilder()
        Dim writer As XmlWriter
        writer = XmlWriter.Create(sb)
        dcs.WriteObject(writer, e.ReturnValue)
        writer.Close()

        ViewState("OriginalEmployee") = sb.ToString()
    End If
End Sub

Le troisième exemple montre la classe d’accès aux données qui interagit avec la base de données Northwind.The third example shows the data access class that interacts with the Northwind database. La classe utilise LINQ pour interroger et mettre à jour la table Employees.The class uses LINQ to query and update the Employees table. L’exemple requiert une classe LINQ to SQL qui représente la base de données Northwind et la table Employees.The example requires a LINQ to SQL class that represents the Northwind database and Employees table. Pour plus d’informations, consultez Guide pratique pour Créer des classes LINQ to SQL dans un projetWeb.For more information, see How to: Create LINQ to SQL Classes in a Web Project.

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();
    }
}
Public Class EmployeeLogic
    Public Shared Function GetFullNamesAndIDs() As Array
        Dim ndc As New NorthwindDataContext()

        Dim employeeQuery = _
            From e In ndc.Employees _
            Order By e.LastName _
            Select FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID

        Return employeeQuery.ToArray()
    End Function

    Public Shared Function GetEmployee(ByVal empID As Integer) As Employee

        If (empID < 0) Then
            Return Nothing
        Else
            Dim ndc As New NorthwindDataContext()
            Dim employeeQuery = _
                From e In ndc.Employees _
                Where e.EmployeeID = empID _
                Select e

            Return employeeQuery.Single()
        End If
    End Function

    Public Shared Sub UpdateEmployeeAddress(ByVal originalEmployee As Employee, ByVal address As String, ByVal city As String, ByVal postalcode As String)

        Dim ndc As New NorthwindDataContext()
        ndc.Employees.Attach(originalEmployee, False)
        originalEmployee.Address = address
        originalEmployee.City = city
        originalEmployee.PostalCode = postalcode
        ndc.SubmitChanges()
    End Sub
End Class

Remarques

Le ObjectDataSource contrôle suppose que la méthode identifiée par la UpdateMethod propriété effectue des mises à jour une par une, plutôt que dans un traitement.The ObjectDataSource control assumes that the method that is identified by the UpdateMethod property performs updates one at a time, rather than in a batch.

La UpdateMethod propriété délègue à UpdateMethod la propriété de ObjectDataSourceView l’objet associé au ObjectDataSource contrôle.The UpdateMethod property delegates to the UpdateMethod property of the ObjectDataSourceView object that is associated with the ObjectDataSource control.

Assurez-vous que les noms de paramètres ObjectDataSource configurés pour UpdateParameters le contrôle dans la collection correspondent aux noms de colonnes retournés par la méthode Select.Make sure that the parameter names configured for the ObjectDataSource control in the UpdateParameters collection match the column names that are returned by the select method.

Durée de vie des objetsObject Lifetime

La méthode identifiée par la UpdateMethod propriété peut être une méthode d’instance ou une static méthode (Shared dans Visual Basic).The method that is identified by the UpdateMethod property can be an instance method or a static (Shared in Visual Basic) method. S’il s’agit d’une méthode d’instance, l’objet métier est créé et détruit chaque fois que la méthode spécifiée UpdateMethod par la propriété est appelée.If it is an instance method, the business object is created and destroyed each time the method that is specified by the UpdateMethod property is called. Vous pouvez gérer les ObjectCreated événements ObjectCreating et pour utiliser l’objet métier avant que la méthode spécifiée par la UpdateMethod propriété ne soit appelée.You can handle the ObjectCreated and ObjectCreating events to work with the business object before the method that is specified by the UpdateMethod property is called. Vous pouvez également gérer l' ObjectDisposing événement déclenché après l’appel de la méthode spécifiée par la UpdateMethod propriété.You can also handle the ObjectDisposing event that is raised after the method that is specified by the UpdateMethod property is called. Si l’objet métier implémente l' IDisposable interface, la Dispose méthode est appelée avant la destruction de l’objet.If the business object implements the IDisposable interface, the Dispose method is called before the object is destroyed. Si la méthode est static (Shared en Visual Basic), l’objet métier n’est jamais créé et vous ne pouvez ObjectCreatedpas ObjectCreatinggérer les ObjectDisposing événements, et.If the method is static (Shared in Visual Basic), the business object is never created and you cannot handle the ObjectCreated, ObjectCreating, and ObjectDisposing events.

Fusion de paramètresParameter Merging

Les paramètres sont ajoutés à UpdateParameters la collection à partir de trois sources:Parameters are added to the UpdateParameters collection from three sources:

  • À partir du contrôle lié aux données, au moment de l’exécution.From the data-bound control, at run time.

  • À partir UpdateParameters de l’élément, de manière déclarative.From the UpdateParameters element, declaratively.

  • À partir Updating du gestionnaire d’événements, par programmation.From the Updating event handler, programmatically.

Tout d’abord, tous les paramètres générés à partir des contrôles liés aux données UpdateParameters sont ajoutés à la collection.First, any parameters that are generated from data-bound controls are added to the UpdateParameters collection. Par exemple, si le ObjectDataSource contrôle est lié à un GridView contrôle qui a les colonnes Name et Number, les paramètres pour Name et Number sont ajoutés à la collection.For example, if the ObjectDataSource control is bound to a GridView control that has the columns Name and Number, the parameters for Name and Number are added to the collection. Le nom exact du paramètre dépend de la OldValuesParameterFormatString propriété.The exact name of the parameter depends on the OldValuesParameterFormatString property. Le type de données de ces paramètres stringest.The data type of these parameters is string. Ensuite, les paramètres qui sont répertoriés dans UpdateParameters l’élément sont ajoutés.Next, the parameters that are listed in the UpdateParameters element are added. Si un paramètre de l' UpdateParameters élément a le même nom qu’un paramètre qui figure déjà dans la UpdateParameters collection, le paramètre existant est modifié pour correspondre au paramètre spécifié dans l' UpdateParameters élément.If a parameter in the UpdateParameters element is found with the same name as a parameter that is already in the UpdateParameters collection, the existing parameter is modified to match the parameter that is specified in the UpdateParameters element. En général, il est utilisé pour modifier le type des données dans le paramètre.Typically, this is used to modify the type of the data in the parameter. Enfin, vous pouvez ajouter et supprimer par programmation des paramètres dans l' Updating événement, qui se produit avant Update l’exécution de la méthode.Finally, you can programmatically add and remove parameters in the Updating event, which occurs before the Update method is run. La méthode est résolue après la fusion des paramètres.The method is resolved after the parameters are merged. La résolution de méthode est décrite dans la section suivante.Method resolution is discussed in the next section.

Important

Vous devez valider toute valeur de paramètre reçue du client.You should validate any parameter value that you receive from the client. Le runtime remplace simplement la valeur de paramètre dans la UpdateMethod propriété.The runtime simply substitutes the parameter value into the UpdateMethod property.

Résolution de méthodeMethod Resolution

Lorsque la Update méthode est appelée, les champs de données du contrôle lié aux données, les paramètres qui ont été créés de manière UpdateParameters déclarative dans l’élément et les paramètres qui ont été Updating ajoutés dans le gestionnaire d’événements sont tous fusionnés.When the Update method is called, the data fields from the data-bound control, the parameters that were created declaratively in the UpdateParameters element, and the parameters that were added in the Updating event handler are all merged. (Pour plus d’informations, consultez la section précédente.) Le ObjectDataSource contrôle tente alors de trouver une méthode à appeler.(For more information, see the preceding section.) The ObjectDataSource control then attempts to find a method to call. Tout d’abord, il recherche une ou plusieurs méthodes portant le nom spécifié dans la UpdateMethod propriété.First, it looks for one or more methods with the name that is specified in the UpdateMethod property. Si aucune correspondance n’est trouvée, InvalidOperationException une exception est levée.If no match is found, an InvalidOperationException exception is thrown. Si une correspondance est trouvée, elle recherche des noms de paramètres correspondants.If a match is found, it then looks for matching parameter names. Par exemple, supposons qu’un type spécifié par la TypeName propriété possède deux méthodes nommées. UpdateARecordFor example, suppose a type that is specified by the TypeName property has two methods named UpdateARecord. L' UpdateARecord un a un paramètre ID,, et l' UpdateARecord autre a deux paramètres Name , Numberet.One UpdateARecord has one parameter, ID, and the other UpdateARecord has two parameters, Name and Number. Si la UpdateParameters collection n’a qu’un seul IDparamètre nommé UpdateARecord , la méthode avec ID uniquement le paramètre est appelée.If the UpdateParameters collection has only one parameter named ID, the UpdateARecord method with just the ID parameter is called. Le type du paramètre n’est pas vérifié pour la résolution des méthodes.The type of the parameter is not checked in resolving the methods. L’ordre des paramètres n’a pas d’importance.The order of the parameters does not matter.

Si la DataObjectTypeName propriété est définie, la méthode est résolue de manière différente.If the DataObjectTypeName property is set, the method is resolved in a different way. Recherche une méthode dont le nom est spécifié dans la UpdateMethod propriété qui accepte un paramètre du type spécifié dans la DataObjectTypeName propriété. ObjectDataSourceThe ObjectDataSource looks for a method with the name that is specified in the UpdateMethod property that takes one parameter of the type that is specified in the DataObjectTypeName property. Dans ce cas, le nom du paramètre n’a pas d’importance.In this case, the name of the parameter does not matter.

S’applique à

Voir aussi