ObjectDataSourceDisposingEventArgs Klasa
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.
Dostarcza dane dla ObjectDisposing zdarzenia kontrolki ObjectDataSource .
public ref class ObjectDataSourceDisposingEventArgs : System::ComponentModel::CancelEventArgs
public class ObjectDataSourceDisposingEventArgs : System.ComponentModel.CancelEventArgs
type ObjectDataSourceDisposingEventArgs = class
inherit CancelEventArgs
Public Class ObjectDataSourceDisposingEventArgs
Inherits CancelEventArgs
- Dziedziczenie
Przykłady
Ten rozdział zawiera dwa przykłady kodu. W pierwszym przykładzie kodu pokazano, jak używać kontrolki ObjectDataSource z obiektem biznesowym i kontrolką GridView do wyświetlania informacji. Drugi przykład kodu zawiera przykładowy obiekt biznesowy warstwy środkowej, którego używa pierwszy przykład kodu.
W poniższym przykładzie kodu pokazano, jak używać kontrolki ObjectDataSource z obiektem biznesowym i kontrolką do wyświetlania GridView informacji. Możesz pracować z obiektem biznesowym, który jest bardzo kosztowny (pod względem czasu lub zasobów), aby utworzyć dla każdej operacji danych wykonywanej przez stronę sieci Web. Jednym ze sposobów pracy z kosztownym obiektem może być jednokrotne utworzenie wystąpienia, a następnie buforowanie go na potrzeby kolejnych operacji zamiast tworzenia i niszczenia go dla każdej operacji danych. W tym przykładzie pokazano ten wzorzec. Zdarzenie można obsługiwać ObjectCreating , aby najpierw sprawdzić pamięć podręczną dla obiektu, a następnie utworzyć wystąpienie tylko wtedy, gdy jeszcze go nie jest buforowane. Następnie obsłuż ObjectDisposing zdarzenie, aby buforować obiekt biznesowy do użytku w przyszłości, zamiast go niszczyć. W tym przykładzie CancelEventArgs.Cancel właściwość ObjectDataSourceDisposingEventArgs obiektu jest ustawiona na true
, aby przekierować ObjectDataSource metodę , aby nie wywoływać Dispose metody w wystąpieniu.
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// Instead of creating and destroying the business object each time, the
// business object is cached in the ASP.NET Cache.
private void GetEmployeeLogic(object sender, ObjectDataSourceEventArgs e)
{
// First check to see if an instance of this object already exists in the Cache.
EmployeeLogic cachedLogic;
cachedLogic = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;
if (null == cachedLogic) {
cachedLogic = new EmployeeLogic();
}
e.ObjectInstance = cachedLogic;
}
private void ReturnEmployeeLogic(object sender, ObjectDataSourceDisposingEventArgs e)
{
// Get the instance of the business object that the ObjectDataSource is working with.
EmployeeLogic cachedLogic = e.ObjectInstance as EmployeeLogic;
// Test to determine whether the object already exists in the cache.
EmployeeLogic temp = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;
if (null == temp) {
// If it does not yet exist in the Cache, add it.
Cache.Insert("ExpensiveEmployeeLogicObject", cachedLogic);
}
// Cancel the event, so that the object will
// not be Disposed if it implements IDisposable.
e.Cancel = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - C# Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1">
</asp:gridview>
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetCreateTime"
typename="Samples.AspNet.CS.EmployeeLogic"
onobjectcreating="GetEmployeeLogic"
onobjectdisposing="ReturnEmployeeLogic" >
</asp:objectdatasource>
</form>
</body>
</html>
<%@ Import namespace="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' Instead of creating and destroying the business object each time, the
' business object is cached in the ASP.NET Cache.
Sub GetEmployeeLogic(sender As Object, e As ObjectDataSourceEventArgs)
' First check to see if an instance of this object already exists in the Cache.
Dim cachedLogic As EmployeeLogic
cachedLogic = CType( Cache("ExpensiveEmployeeLogicObject"), EmployeeLogic)
If (cachedLogic Is Nothing) Then
cachedLogic = New EmployeeLogic
End If
e.ObjectInstance = cachedLogic
End Sub ' GetEmployeeLogic
Sub ReturnEmployeeLogic(sender As Object, e As ObjectDataSourceDisposingEventArgs)
' Get the instance of the business object that the ObjectDataSource is working with.
Dim cachedLogic As EmployeeLogic
cachedLogic = CType( e.ObjectInstance, EmployeeLogic)
' Test to determine whether the object already exists in the cache.
Dim temp As EmployeeLogic
temp = CType( Cache("ExpensiveEmployeeLogicObject"), EmployeeLogic)
If (temp Is Nothing) Then
' If it does not yet exist in the Cache, add it.
Cache.Insert("ExpensiveEmployeeLogicObject", cachedLogic)
End If
' Cancel the event, so that the object will
' not be Disposed if it implements IDisposable.
e.Cancel = True
End Sub ' ReturnEmployeeLogic
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - VB Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1">
</asp:gridview>
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetCreateTime"
typename="Samples.AspNet.VB.EmployeeLogic"
onobjectcreating="GetEmployeeLogic"
onobjectdisposing="ReturnEmployeeLogic" >
</asp:objectdatasource>
</form>
</body>
</html>
Poniższy przykład kodu zawiera przykładowy obiekt biznesowy warstwy środkowej, którego używa powyższy przykład kodu. Przykładowy kod składa się z podstawowego obiektu biznesowego zdefiniowanego EmployeeLogic
przez klasę, która jest klasą, która utrzymuje stan i hermetyzuje logikę biznesową. Aby uzyskać kompletny przykład roboczy, należy skompilować ten kod jako bibliotekę, a następnie użyć tych klas ze strony ASP.
namespace Samples.AspNet.CS {
using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
//
// EmployeeLogic is a stateless business object that encapsulates
// the operations you can perform on a NorthwindEmployee object.
//
public class EmployeeLogic {
public EmployeeLogic () : this(DateTime.Now) {
}
public EmployeeLogic (DateTime creationTime) {
_creationTime = creationTime;
}
private DateTime _creationTime;
// Returns a collection of NorthwindEmployee objects.
public ICollection GetCreateTime () {
ArrayList al = new ArrayList();
// Returns creation time for this example.
al.Add("The business object that you are using was created at " + _creationTime);
return al;
}
}
}
Imports System.Collections
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace Samples.AspNet.VB
Public Class EmployeeLogic
Public Sub New()
MyClass.New(DateTime.Now)
End Sub
Public Sub New(ByVal creationTime As DateTime)
_creationTime = creationTime
End Sub
Private _creationTime As DateTime
' Returns a collection of NorthwindEmployee objects.
Public Function GetCreateTime() As ICollection
Dim al As New ArrayList()
' Returns creation time for this example.
al.Add("The business object that you are using was created at " + _creationTime)
Return al
End Function 'GetCreateTime
End Class
End Namespace ' Samples.AspNet.VB
Uwagi
Klasa ObjectDataSourceDisposingEventArgs jest używana w metodzie OnObjectDisposing w celu zapewnienia dostępu do wystąpienia obiektu biznesowego po wykonaniu wszystkich operacji danych korzystających z ObjectDataSource kontrolki i obiektu biznesowego, ale przed zniszczeniem obiektu biznesowego. Dostęp do obiektu biznesowego ObjectInstance jest uzyskiwany przy użyciu właściwości . Dodając delegata do obsługi ObjectDisposing zdarzenia, można uzyskać dostęp do wszystkich publicznie uwidocznionych członków obiektu biznesowego, aby wykonać dowolną ostateczną pracę lub wyczyścić.
Metoda OnObjectDisposing nie jest wywoływana przez kontrolkę ObjectDataSource , jeśli metoda wykonująca static
operacje na danych jest metodą. Wystąpienie obiektu biznesowego nie jest tworzone, gdy metoda jest statyczna.
Kontrolka ObjectDataSource uwidacznia wiele zdarzeń, które można obsłużyć do pracy z bazowym obiektem biznesowym w różnych momentach jego cyklu życia. W poniższej tabeli wymieniono zdarzenia oraz skojarzone EventArgs klasy i delegaty procedury obsługi zdarzeń.
Konstruktory
ObjectDataSourceDisposingEventArgs(Object) |
Inicjuje ObjectDataSourceDisposingEventArgs nowe wystąpienie klasy przy użyciu określonego obiektu. |
Właściwości
Cancel |
Pobiera lub ustawia wartość wskazującą, czy zdarzenie powinno zostać anulowane. (Odziedziczone po CancelEventArgs) |
ObjectInstance |
Pobiera obiekt reprezentujący obiekt biznesowy, za pomocą którego kontrolka ObjectDataSource wykonuje operacje na danych. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |