ObjectDataSource.UpdateMethod, propriété
Mise à jour : novembre 2007
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.
Assembly : System.Web (dans System.Web.dll)
/** @property */ public String get_UpdateMethod() /** @property */ public void set_UpdateMethod(String value)
public function get UpdateMethod () : String public function set UpdateMethod (value : String)
<asp:ObjectDataSource UpdateMethod="String" />
Valeur de propriété
Type : System.StringChaîne qui représente le nom de la méthode ou de la fonction que ObjectDataSource utilise pour mettre à jour des données. La valeur par défaut est une chaîne vide.
Le contrôle ObjectDataSource suppose que la méthode qui est identifiée par la propriété UpdateMethod exécute des mises à jour individuellement plutôt que par lots.
La propriété UpdateMethod délègue à la propriété UpdateMethod de l'objet ObjectDataSourceView associé au contrôle ObjectDataSource.
Durée de vie des objets
La méthode identifiée par la propriété UpdateMethod peut être une méthode d'instance ou une méthode (static (Shared en Visual Basic). 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 par la propriété UpdateMethod est appelée. Vous pouvez gérer les événements ObjectCreated et ObjectCreating pour utiliser l'objet métier avant que la méthode spécifiée par la propriété UpdateMethod ne soit appelée. Vous pouvez également gérer l'événement ObjectDisposing qui est déclenché après l'appel de la méthode spécifiée par la propriété UpdateMethod. Si l'objet métier implémente l'interface IDisposable, la méthode Dispose est appelée avant la destruction de l'objet. Si la méthode est une méthode static (Shared en Visual Basic), l'objet métier n'est jamais créé et vous ne pouvez pas gérer les événements ObjectCreated, ObjectCreating et ObjectDisposing.
Fusion des paramètres
Les paramètres sont ajoutés à la collection DeleteParameters depuis trois sources :
Depuis le contrôle lié aux données, au moment de l'exécution.
Depuis l'élément UpdateParameters, de manière déclarative.
Depuis le gestionnaire d'événements Updating, par programme.
D'abord, tous les paramètres générés depuis des contrôles liés aux données sont ajoutés à la collection UpdateParameters. Par exemple, si le contrôle ObjectDataSource est lié à un contrôle GridView qui comporte les colonnes Name et Number, les paramètres pour Name et Number sont ajoutés à la collection. Le nom exact du paramètre dépend de la propriété OldValuesParameterFormatString. Le type de données de ces paramètres est string. Ensuite, les paramètres qui sont répertoriés dans l'élément UpdateParameters sont ajoutés. Si un paramètre dans l'élément UpdateParameters possède le même nom qu'un paramètre déjà présent dans la collection UpdateParameters, le paramètre existant est modifié pour correspondre au paramètre spécifié dans l'élément UpdateParameters. En général, cela permet de modifier le type des données dans le paramètre. Enfin, vous pouvez ajouter et supprimer des paramètres par programme dans l'événement Updating qui se produit avant l'exécution de la méthode Update. La méthode est résolue après la fusion des paramètres. La résolution de méthode est abordée dans la section suivante.
Note de sécurité : |
|---|
Vous devez valider toute valeur de paramètre que vous recevez du client. Le runtime substitue simplement la valeur de paramètre dans la propriété UpdateMethod. |
Résolution de méthode
Lorsque la méthode Update est appelée, les champs de données du contrôle lié aux données, les paramètres créés de manière déclarative dans l'élément UpdateParameters et les paramètres ajoutés dans le gestionnaire d'événements Updating sont tous fusionnés. (Pour plus d'informations, consultez la section précédente.) Le contrôle ObjectDataSource essaie ensuite de rechercher une méthode à appeler. D'abord, il recherche une ou plusieurs méthodes avec le nom spécifié dans la propriété UpdateMethod. Si aucune correspondance n'est trouvée, une exception InvalidOperationException est levée. Si une correspondance est trouvée, il recherche ensuite des noms de paramètres correspondants. Supposez, par exemple, qu'un type spécifié par la propriété TypeName possède deux méthodes nommées UpdateARecord. L'une UpdateARecord comporte un paramètre, ID et l'autre UpdateARecord comporte deux paramètres, Name et Number. Si la collection UpdateParameters comporte un seul paramètre nommé ID, la méthode UpdateARecord comportant uniquement le paramètre ID est appelée. Le type du paramètre n'est pas vérifié lors de la résolution des méthodes. L'ordre des paramètres est sans importance.
Si la propriété DataObjectTypeName est définie, la méthode est résolue différemment. ObjectDataSource recherche une méthode avec le nom spécifié dans la propriété UpdateMethod qui prend un paramètre du type spécifié dans la propriété DataObjectTypeName. Dans ce cas, le nom du paramètre est sans importance.
Les trois exemples suivants montrent une page Web, une classe de page code-behind et une classe d'accès aux données qui permet à un utilisateur d'extraire et de mettre à jour des enregistrements de la table Employees dans la base de données Northwind.
Le premier exemple montre une page Web contenant deux contrôles ObjectDataSource, un contrôle DropDownList et un contrôle DetailsView. Le premier contrôle ObjectDataSource et le contrôle DropDownList sont utilisés pour extraire et afficher les noms des employés à partir de la base de données. Le deuxième contrôle ObjectDataSource et le contrôle DetailsView sont utilisés pour extraire, afficher et modifier les données de l'enregistrement d'employé sélectionné par l'utilisateur.
<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>
Le second exemple présente des gestionnaires pour les événements Selected et Updating. Le gestionnaire d'événements Selected sérialise l'objet qui contient les données extraites de la table Employee. L'objet sérialisé est stocké à l'état d'affichage. Le gestionnaire d'événements Updating désérialise l'objet à l'état d'affichage qui contient les données d'origine pour l'enregistrement de données mis à jour. L'objet qui contient les données d'origine est passé sous forme de paramètre à la méthode Update. Les données d'origine doivent être passées à 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.
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(); } }
Le troisième exemple présente la classe d'accès aux données qui interagit avec la base de données Northwind. La classe utilise LINQ pour interroger et mettre à jour la table Employees. L'exemple requiert une classe LINQ to SQL qui représente la base de données Northwind et la table Employees. Pour plus d'informations, consultez la page Comment : créer des classes LINQ to SQL dans une application Web.
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(); } }
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Note de sécurité :