ObjectDataSource.UpdateMethod Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví název metody nebo funkce, kterou ObjectDataSource ovládací prvek vyvolá k aktualizaci dat.
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
Hodnota vlastnosti
Řetězec, který představuje název metody nebo funkce, která ObjectDataSource používá k aktualizaci dat. Výchozí hodnota je prázdný řetězec.
Příklady
Následující tři příklady ukazují webovou stránku, třídu stránky s kódem na pozadí a třídu přístupu k datům, které uživateli umožňují načítat a aktualizovat záznamy v tabulce Employees v databázi Northwind.
První příklad ukazuje webovou stránku, která obsahuje dva ObjectDataSource ovládací prvky, DropDownList ovládací prvek a DetailsView ovládací prvek. První ObjectDataSource ovládací prvek a DropDownList ovládací prvek slouží k načtení a zobrazení jmen zaměstnanců z databáze. Druhý ObjectDataSource ovládací prvek a DetailsView ovládací prvek slouží k načtení, zobrazení a úpravě dat ze záznamu zaměstnance vybraného uživatelem.
<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>
Druhý příklad ukazuje obslužné rutiny Selected pro události a Updating . Obslužná rutina Selected události serializuje objekt, který obsahuje data načtená z tabulky Employee. Serializovaný objekt je uložen ve stavu zobrazení. Obslužná rutina Updating události deserializuje objekt ve stavu zobrazení, který obsahuje původní data pro datový záznam, který se aktualizuje. Objekt, který obsahuje původní data, se předá jako parametr metodě Update. Původní data musí být předána databázi, aby bylo možné je použít ke kontrole, zda nebyla změněna jiným procesem.
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
Třetí příklad ukazuje třídu přístupu k datům, která komunikuje s databází Northwind. Třída používá LINQ k dotazování a aktualizaci tabulky Employees. Příklad vyžaduje třídu LINQ to SQL, která představuje databázi Northwind a tabulku Employees. Další informace najdete v tématu Postupy: Vytvoření tříd LINQ to SQL ve webovém projektu.
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
Poznámky
Ovládací ObjectDataSource prvek předpokládá, že metoda identifikovaná UpdateMethod vlastností provádí aktualizace po jednom, nikoli v dávce.
Vlastnost UpdateMethod je delegovaná na UpdateMethod vlastnost objektu ObjectDataSourceView , který je přidružen k ovládacímu prvku ObjectDataSource .
Ujistěte se, že názvy parametrů nakonfigurované pro ObjectDataSource ovládací prvek v kolekci UpdateParameters odpovídají názvům sloupců vráceným metodou select.
Doba života objektu
Metoda identifikovaná UpdateMethod vlastností může být metoda instance nebo static
metoda (Shared
v jazyce Visual Basic). Pokud se jedná o metodu instance, obchodní objekt je vytvořen a zničen při každém zavolání metody, která je určena UpdateMethod vlastností. Můžete zpracovat ObjectCreated události a ObjectCreating pro práci s obchodním objektem před zavoláním metody, která je určena UpdateMethod vlastností. Můžete také zpracovat ObjectDisposing událost, která je vyvolána po zavolání metody určené UpdateMethod vlastností . Pokud obchodní objekt implementuje IDisposable rozhraní, Dispose je volána metoda před zničením objektu. Pokud je static
metoda (Shared
v jazyce Visual Basic), obchodní objekt se nikdy nevytvořil a nelze zpracovat ObjectCreatedudálosti , ObjectCreatinga ObjectDisposing .
Slučování parametrů
Parametry se do UpdateParameters kolekce přidávají ze tří zdrojů:
Z ovládacího prvku vázaného na data za běhu.
Z elementu
UpdateParameters
deklarativně.Z obslužné rutiny Updating události programově.
Nejprve se do kolekce přidají všechny parametry vygenerované z ovládacích prvků vázaných na UpdateParameters data. Pokud ObjectDataSource je například ovládací prvek vázaný na GridView ovládací prvek, který má sloupce Name
a Number
, parametry pro Name
a Number
se přidají do kolekce. Přesný název parametru závisí na OldValuesParameterFormatString vlastnosti . Datový typ těchto parametrů je string
. Dále se přidají parametry, které jsou uvedené v elementu UpdateParameters
. Pokud se v elementu UpdateParameters
najde parametr se stejným názvem jako parametr, který je již v kolekci UpdateParameters , existující parametr se upraví tak, aby odpovídal parametru zadanému v elementu UpdateParameters
. Obvykle se používá ke změně typu dat v parametru . Nakonec můžete programově přidat a odebrat parametry v Updating události, která nastane před spuštěním Update metody. Metoda je vyřešena po sloučení parametrů. Řešení metody je popsáno v další části.
Důležité
Měli byste ověřit všechny hodnoty parametrů, které obdržíte od klienta. Modul runtime jednoduše nahradí hodnotu parametru do UpdateMethod vlastnosti .
Řešení metody
Při zavolání Update metody jsou všechna datová pole z ovládacího prvku vázaného na data, parametry vytvořené deklarativně v elementu UpdateParameters
a parametry přidané v Updating obslužné rutině události sloučeny. (Další informace najdete v předchozí části.) Ovládací prvek se ObjectDataSource pak pokusí najít metodu, která se má volat. Nejprve vyhledá jednu nebo více metod s názvem, který je zadán ve UpdateMethod vlastnosti . Pokud se nenajde žádná shoda, InvalidOperationException vyvolá se výjimka. Pokud se najde shoda, hledá odpovídající názvy parametrů. Předpokládejme například, že typ určený TypeName vlastností má dvě metody s názvem UpdateARecord
. Jeden UpdateARecord
má jeden parametr, ID
a druhý UpdateARecord
má dva parametry, Name
a Number
.
UpdateParameters Pokud má kolekce pouze jeden parametr s názvem ID
, volá se UpdateARecord
metoda pouze s parametrem ID
. Typ parametru se při překladu metod nekontroluje. Nezáleží na pořadí parametrů.
DataObjectTypeName Pokud je vlastnost nastavena, metoda je vyřešena jiným způsobem. Hledá ObjectDataSource metodu s názvem, který je zadán ve UpdateMethod vlastnosti , která přebírá jeden parametr typu, který je zadán ve DataObjectTypeName vlastnosti . V tomto případě nezáleží na názvu parametru.