ObjectDataSource.UpdateMethod Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia nazwę metody lub funkcji wywoływanej przez ObjectDataSource kontrolkę w celu zaktualizowania danych.
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
Wartość właściwości
Ciąg reprezentujący nazwę metody lub funkcji używanej ObjectDataSource do aktualizowania danych. Wartość domyślna to pusty ciąg.
Przykłady
W poniższych trzech przykładach pokazano stronę sieci Web, klasę strony za kodem i klasę dostępu do danych, która umożliwia użytkownikowi pobieranie i aktualizowanie rekordów w tabeli Employees w bazie danych Northwind.
Pierwszy przykład przedstawia stronę sieci Web zawierającą dwie ObjectDataSource kontrolki, kontrolkę DropDownList i kontrolkę DetailsView . Pierwsza ObjectDataSource kontrolka i kontrolka DropDownList są używane do pobierania i wyświetlania nazw pracowników z bazy danych. Druga ObjectDataSource kontrolka i kontrolka DetailsView służą do pobierania, wyświetlania i modyfikowania danych z rekordu pracownika wybranego przez użytkownika.
<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>
W drugim przykładzie przedstawiono programy obsługi dla zdarzeń Selected i Updating . Procedura Selected obsługi zdarzeń serializuje obiekt zawierający dane pobrane z tabeli Employee. Serializowany obiekt jest przechowywany w stanie widoku. Program Updating obsługi zdarzeń deserializuje obiekt w stanie widoku zawierającym oryginalne dane dla aktualizowanego rekordu danych. Obiekt zawierający oryginalne dane jest przekazywany jako parametr do metody Update. Oryginalne dane muszą zostać przekazane do bazy danych, aby można było ich użyć do sprawdzenia, czy dane zostały zmodyfikowane przez inny 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
Trzeci przykład przedstawia klasę dostępu do danych, która współdziała z bazą danych Northwind. Klasa używa linQ do wykonywania zapytań i aktualizowania tabeli Employees. W przykładzie jest wymagana klasa LINQ to SQL reprezentująca tabelę Northwind Database i Employees. Aby uzyskać więcej informacji, zobacz How to: Create LINQ to SQL Classes in a Web Project (Instrukcje: tworzenie klas LINQ to SQL w projekcie internetowym).
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
Uwagi
Kontrolka ObjectDataSource zakłada, że metoda, która jest identyfikowana przez UpdateMethod właściwość, wykonuje aktualizacje pojedynczo, a nie w partii.
Właściwość UpdateMethod deleguje do UpdateMethod właściwości obiektu skojarzonego ObjectDataSourceView z kontrolką ObjectDataSource .
Upewnij się, że nazwy parametrów skonfigurowane dla ObjectDataSource kontrolki w UpdateParameters kolekcji są zgodne z nazwami kolumn zwracanych przez metodę select.
Okres istnienia obiektu
Metoda, która jest identyfikowana przez UpdateMethod właściwość, może być metodą wystąpienia lub static
(Shared
w Visual Basic). Jeśli jest to metoda wystąpienia, obiekt biznesowy jest tworzony i niszczony za każdym razem, gdy wywoływana jest metoda określona UpdateMethod przez właściwość. Zdarzenia i można obsługiwać ObjectCreated do pracy z obiektem biznesowym przed wywołaną metodą, która jest określona UpdateMethod przez właściwość .ObjectCreating Można również obsłużyć ObjectDisposing zdarzenie wywoływane po wywołaniu UpdateMethod metody określonej przez właściwość . Jeśli obiekt biznesowy implementuje IDisposable interfejs, Dispose metoda jest wywoływana przed zniszczeniem obiektu. Jeśli metoda to static
(Shared
w Visual Basic), obiekt biznesowy nigdy nie jest tworzony i nie można obsłużyć zdarzeń ObjectCreated, i .ObjectDisposingObjectCreating
Scalanie parametrów
Parametry są dodawane do kolekcji UpdateParameters z trzech źródeł:
Z kontrolki powiązanej z danymi w czasie wykonywania.
UpdateParameters
Z elementu deklaratywnie.Programowo z programu obsługi zdarzeń Updating .
Najpierw wszystkie parametry generowane na podstawie kontrolek powiązanych z danymi są dodawane do kolekcji UpdateParameters . Jeśli na przykład kontrolka ObjectDataSource jest powiązana z kontrolką zawierającą GridView kolumny Name
i Number
, parametry elementu Name
i Number
zostaną dodane do kolekcji. Dokładna nazwa parametru zależy od OldValuesParameterFormatString właściwości . Typ danych tych parametrów to string
. Następnie zostaną dodane parametry wymienione w elemecie UpdateParameters
. Jeśli parametr w elemecie UpdateParameters
zostanie znaleziony o tej samej nazwie co parametr, który znajduje się już w UpdateParameters kolekcji, istniejący parametr zostanie zmodyfikowany w celu dopasowania do parametru określonego w elemecie UpdateParameters
. Zazwyczaj jest to używane do modyfikowania typu danych w parametrze . Na koniec można programowo dodawać i usuwać parametry w Updating zdarzeniu, które występuje przed uruchomieniem Update metody. Metoda jest rozpoznawana po scaleniu parametrów. Rozwiązanie metody zostało omówione w następnej sekcji.
Ważne
Należy zweryfikować dowolną wartość parametru otrzymaną od klienta. Środowisko uruchomieniowe po prostu podstawi wartość parametru do UpdateMethod właściwości .
Rozpoznawanie metody
Po wywołaniu Update metody pola danych z kontrolki powiązanej z danymi, parametry, które zostały utworzone deklaratywnie w elemecie UpdateParameters
, a parametry dodane w procedurze Updating obsługi zdarzeń są scalane. (Aby uzyskać więcej informacji, zobacz poprzednią sekcję). Następnie kontrolka ObjectDataSource próbuje znaleźć metodę do wywołania. Najpierw wyszukuje jedną lub więcej metod o nazwie określonej we UpdateMethod właściwości . Jeśli dopasowanie nie zostanie znalezione, InvalidOperationException zostanie zgłoszony wyjątek. Jeśli zostanie znalezione dopasowanie, szuka pasujących nazw parametrów. Załóżmy na przykład, że typ określony przez TypeName właściwość ma dwie metody o nazwie UpdateARecord
. Jeden z nich UpdateARecord
ma jeden parametr , ID
a drugi UpdateARecord
ma dwa parametry: Name
i Number
. UpdateParameters Jeśli kolekcja ma tylko jeden parametr o nazwie ID
, wywoływana UpdateARecord
jest metoda z tylko parametrem ID
. Typ parametru nie jest sprawdzany podczas rozpoznawania metod. Kolejność parametrów nie ma znaczenia.
DataObjectTypeName Jeśli właściwość jest ustawiona, metoda jest rozpoznawana w inny sposób. Szuka ObjectDataSource metody o nazwie określonej we UpdateMethod właściwości , która przyjmuje jeden parametr typu określonego DataObjectTypeName we właściwości . W takim przypadku nazwa parametru nie ma znaczenia.
Dotyczy
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla