ObjectDataSourceDisposingEventArgs Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece dados para o ObjectDisposing evento do ObjectDataSource controlo.
public ref class ObjectDataSourceDisposingEventArgs : System::ComponentModel::CancelEventArgs
public class ObjectDataSourceDisposingEventArgs : System.ComponentModel.CancelEventArgs
type ObjectDataSourceDisposingEventArgs = class
inherit CancelEventArgs
Public Class ObjectDataSourceDisposingEventArgs
Inherits CancelEventArgs
- Herança
Exemplos
Esta seção contém dois exemplos de código. O primeiro exemplo de código demonstra como usar um ObjectDataSource controlo com um objeto de negócio e um GridView controlo para mostrar informação. O segundo exemplo de código fornece o exemplo de objeto de negócio de nível intermédio que o primeiro exemplo de código utiliza.
O exemplo de código seguinte demonstra como usar um ObjectDataSource controlo com um objeto de negócio e um GridView controlo para mostrar informação. Pode trabalhar com um objeto de negócio que é muito dispendioso (em termos de tempo ou recursos) para criar para cada operação de dados que a sua página Web realiza. Uma forma de trabalhar com um objeto caro pode ser criar uma instância dele uma vez e depois armazená-lo em cache para operações subsequentes, em vez de o criar e destruir para cada operação de dados. Este exemplo demonstra este padrão. Podes gerir o ObjectCreating evento para verificar primeiro a cache de um objeto e depois criar uma instância, apenas se uma ainda não estiver em cache. Depois, gere o ObjectDisposing evento para armazenar o objeto de negócio em cache para uso futuro, em vez de o destruir. Neste exemplo, a CancelEventArgs.Cancel propriedade do ObjectDataSourceDisposingEventArgs objeto é definida como true, para direcionar o ObjectDataSource to para não chamar o Dispose método na instância.
<%@ 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>
O exemplo de código seguinte fornece um exemplo de objeto de negócio de nível intermédio que o exemplo de código anterior utiliza. O exemplo de código consiste num objeto de negócio básico, definido pela EmployeeLogic classe, que é uma classe que mantém o estado e encapsula a lógica de negócio. Para um exemplo completo e funcional, deve compilar este código como uma biblioteca e depois usar estas classes a partir de uma página 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
Observações
A ObjectDataSourceDisposingEventArgs classe é usada no OnObjectDisposing método para fornecer acesso à instância do objeto de negócio após a realização de quaisquer operações de dados que estejam a usar o ObjectDataSource controlo e o objeto de negócio, mas antes de o objeto de negócio ser destruído. O objeto de negócio é acedido através da ObjectInstance propriedade. Ao adicionar um delegado para tratar do ObjectDisposing evento, pode aceder a quaisquer membros expostos publicamente do objeto de negócio para realizar o trabalho final ou a limpeza.
O OnObjectDisposing método não é chamado pelo ObjectDataSource controlo, se o método que realiza operações de dados for um static método. Não é criada nenhuma instância de objeto de negócio quando o método é estático.
O ObjectDataSource controlo expõe muitos eventos que pode gerir para trabalhar com o objeto de negócio subjacente em vários momentos do seu ciclo de vida. A tabela seguinte lista os eventos e as classes associadas EventArgs e os delegados handler de eventos.
Construtores
| Name | Description |
|---|---|
| ObjectDataSourceDisposingEventArgs(Object) |
Inicializa uma nova instância da ObjectDataSourceDisposingEventArgs classe usando o objeto especificado. |
Propriedades
| Name | Description |
|---|---|
| Cancel |
Recebe ou define um valor que indica se o evento deve ser cancelado. (Herdado de CancelEventArgs) |
| ObjectInstance |
Obtém um objeto que representa o objeto de negócio com o qual o ObjectDataSource controlo realiza operações de dados. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |