ObjectDataSource.Updating Event
Occurs before an Update operation.
Assembly: System.Web (in System.Web.dll)
Handle the Updating event to perform additional initialization that is specific to your application, to validate the values of parameters, or to change the parameter values before the ObjectDataSource control performs the update operation. The parameters are available as an IDictionary collection that is accessed by the InputParameters property, which is exposed by the ObjectDataSourceMethodEventArgs object.
For more information about handling events, see NIB: Consuming Events.
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.
The first example shows a Web page that contains two ObjectDataSource controls, a DropDownList control, and a DetailsView control. The first ObjectDataSource control and the DropDownList control are used to retrieve and display employee names from the database. 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" 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>
The second example shows handlers for the Selected and Updating events. The Selected event handler serializes the object that contains data that was retrieved from the Employee table. The serialized object is stored in view state. The Updating event handler deserializes the object in view state that contains the original data for the data record that is being updated. The object that contains the original data is passed as a parameter to the Update method. 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 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
The third example shows the data access class that interacts with the Northwind database. The class uses LINQ to query and update the Employees table. The example requires a LINQ to SQL class that represents the Northwind database and Employees table. For more information, see How to: Create LINQ to SQL Classes in a Web Project.
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
Available since 2.0