ObjectDataSource.UpdateMethod Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u de naam op van de methode of functie die door het ObjectDataSource besturingselement wordt aangeroepen om gegevens bij te werken.
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
Waarde van eigenschap
Een tekenreeks die de naam vertegenwoordigt van de methode of functie die wordt ObjectDataSource gebruikt om gegevens bij te werken. De standaardwaarde is een lege tekenreeks.
Voorbeelden
In de volgende drie voorbeelden ziet u een webpagina, een code-behind-paginaklasse en een gegevenstoegangsklasse waarmee een gebruiker records kan ophalen en bijwerken in de tabel Werknemers in de Northwind-database.
In het eerste voorbeeld ziet u een webpagina met twee ObjectDataSource besturingselementen, een DropDownList besturingselement en een DetailsView besturingselement. Het eerste ObjectDataSource besturingselement en het DropDownList besturingselement worden gebruikt om namen van werknemers op te halen en weer te geven uit de database. Het tweede ObjectDataSource besturingselement en het DetailsView besturingselement worden gebruikt om de gegevens op te halen, weer te geven en te wijzigen uit de werknemersrecord die door de gebruiker is geselecteerd.
<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>
In het tweede voorbeeld ziet u handlers voor de Selected en Updating gebeurtenissen. De Selected gebeurtenis-handler serialiseert het object dat gegevens bevat die zijn opgehaald uit de tabel Werknemer. Het geserialiseerde object wordt opgeslagen in de weergavestatus. De Updating gebeurtenishandler ontserialiseerd het object in de weergavestatus die de oorspronkelijke gegevens bevat voor de gegevensrecord die wordt bijgewerkt. Het object dat de oorspronkelijke gegevens bevat, wordt doorgegeven als een parameter aan de updatemethode. De oorspronkelijke gegevens moeten worden doorgegeven aan de database, zodat deze kunnen worden gebruikt om te controleren of de gegevens zijn gewijzigd door een ander proces.
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
In het derde voorbeeld ziet u de gegevenstoegangsklasse die communiceert met de Northwind-database. De klasse maakt gebruik van LINQ om de tabel Werknemers op te vragen en bij te werken. Voor het voorbeeld is een LINQ vereist naar SQL-klasse die de northwind-database en de tabel Werknemers vertegenwoordigt. Zie Hoe to: LINQ maken voor SQL-klassen in een web-Project voor meer informatie.
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
Opmerkingen
In ObjectDataSource het besturingselement wordt ervan uitgegaan dat de methode die door de UpdateMethod eigenschap wordt geïdentificeerd, updates één voor één uitvoert in plaats van in een batch.
De UpdateMethod eigenschap wordt gedelegeerd aan de UpdateMethod eigenschap van het ObjectDataSourceView object dat is gekoppeld aan het ObjectDataSource besturingselement.
Zorg ervoor dat de parameternamen die zijn geconfigureerd voor het ObjectDataSource besturingselement in de UpdateParameters verzameling overeenkomen met de kolomnamen die worden geretourneerd door de selectiemethode.
Levensduur van object
De methode die wordt geïdentificeerd door de eigenschap UpdateMethod kan een instantiemethode of een methode static (Shared in Visual Basic) zijn. Als het een instantiemethode is, wordt het bedrijfsobject gemaakt en vernietigd telkens wanneer de methode die is opgegeven door de UpdateMethod eigenschap wordt aangeroepen. U kunt de ObjectCreated en ObjectCreating gebeurtenissen afhandelen om met het bedrijfsobject te werken voordat de methode die is opgegeven door de UpdateMethod eigenschap wordt aangeroepen. U kunt ook de ObjectDisposing gebeurtenis afhandelen die wordt gegenereerd nadat de methode die is opgegeven door de UpdateMethod eigenschap wordt aangeroepen. Als het bedrijfsobject de IDisposable interface implementeert, wordt de Dispose methode aangeroepen voordat het object wordt vernietigd. Als de methode is static (Shared in Visual Basic), wordt het bedrijfsobject nooit gemaakt en kunt u de gebeurtenissen ObjectCreated, ObjectCreating en ObjectDisposing niet verwerken.
Parameter samenvoegen
Parameters worden vanuit drie bronnen toegevoegd aan de UpdateParameters verzameling:
Vanuit het gegevensgebonden besturingselement, tijdens runtime.
Van het
UpdateParameterselement, declaratief.Programmatisch vanuit de Updating gebeurtenis-handler.
Eerst worden parameters die worden gegenereerd op basis van gegevensgebonden besturingselementen toegevoegd aan de UpdateParameters verzameling. Als het ObjectDataSource besturingselement bijvoorbeeld is gebonden aan een GridView besturingselement met de kolommen Name en Number, worden de parameters voor Name en Number toegevoegd aan de verzameling. De exacte naam van de parameter is afhankelijk van de OldValuesParameterFormatString eigenschap. Het gegevenstype van deze parameters is string. Vervolgens worden de parameters die in het UpdateParameters element worden vermeld, toegevoegd. Als een parameter in het UpdateParameters element wordt gevonden met dezelfde naam als een parameter die zich al in de UpdateParameters verzameling bevindt, wordt de bestaande parameter gewijzigd zodat deze overeenkomt met de parameter die is opgegeven in het UpdateParameters element. Dit wordt meestal gebruikt om het type gegevens in de parameter te wijzigen. Ten slotte kunt u programmatisch parameters toevoegen en verwijderen in de Updating gebeurtenis, die plaatsvinden voordat de Update methode wordt uitgevoerd. De methode wordt opgelost nadat de parameters zijn samengevoegd. Methodeomzetting wordt in de volgende sectie besproken.
Important
U moet een parameterwaarde valideren die u van de client ontvangt. De runtime vervangt simpelweg de parameterwaarde in de UpdateMethod eigenschap.
Methodeomzetting
Wanneer de Update methode wordt aangeroepen, worden de gegevensvelden van het besturingselement voor gegevens, de parameters die declaratief in het UpdateParameters element zijn gemaakt en de parameters die in de Updating gebeurtenis-handler zijn toegevoegd, allemaal samengevoegd. (Zie de voorgaande sectie voor meer informatie.) Het ObjectDataSource besturingselement probeert vervolgens een methode te vinden die moet worden aangeroepen. Eerst wordt gezocht naar een of meer methoden met de naam die is opgegeven in de UpdateMethod eigenschap. Als er geen overeenkomst wordt gevonden, wordt er een InvalidOperationException uitzondering gegenereerd. Als er een overeenkomst wordt gevonden, zoekt deze naar overeenkomende parameternamen. Stel dat een type dat door de eigenschap is opgegeven, twee methoden heeft met de TypeName naam UpdateARecord. De UpdateARecord ene heeft één parameter, IDen de andere UpdateARecord heeft twee parameters, Name en Number. Als de UpdateParameters verzameling slechts één parameter heeft met de naam ID, wordt de UpdateARecord methode met alleen de ID parameter aangeroepen. Het type van de parameter wordt niet gecontroleerd bij het omzetten van de methoden. De volgorde van de parameters maakt niet uit.
Als de DataObjectTypeName eigenschap is ingesteld, wordt de methode op een andere manier omgezet. Er ObjectDataSource wordt gezocht naar een methode met de naam die is opgegeven in de UpdateMethod eigenschap die één parameter gebruikt van het type dat is opgegeven in de DataObjectTypeName eigenschap. In dit geval maakt de naam van de parameter niet uit.