ObjectDataSource.Selected Gebeurtenis
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.
Vindt plaats wanneer een Select() bewerking is voltooid.
public:
event System::Web::UI::WebControls::ObjectDataSourceStatusEventHandler ^ Selected;
public event System.Web.UI.WebControls.ObjectDataSourceStatusEventHandler Selected;
member this.Selected : System.Web.UI.WebControls.ObjectDataSourceStatusEventHandler
Public Custom Event Selected As ObjectDataSourceStatusEventHandler
Gebeurtenistype
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
Voer de Selected gebeurtenis uit om de waarden van een retourwaarde of uitvoerparameters te onderzoeken of om te bepalen of er een uitzondering is opgetreden nadat een Select bewerking is voltooid. De eigenschappen van de retourwaarde, de uitvoerparameters en de afhandeling van uitzonderingen zijn beschikbaar in het ObjectDataSourceStatusEventArgs object dat is gekoppeld aan de gebeurtenis.
Zie Gebeurtenissen verwerken en genereren voor meer informatie over het afhandelen van gebeurtenissen.