ObjectDataSourceDisposingEventArgs Classe

Definição

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
ObjectDataSourceDisposingEventArgs

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.

Event EventArgs EventHandler
ObjectCreating.

Ocorre imediatamente antes da instância do objeto de negócio ser criada.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
ObjectCreated.

Ocorre imediatamente após a criação da instância do objeto de negócio.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
Selecting.

Ocorre antes de os dados serem recuperados.
ObjectDataSourceSelectingEventArgs ObjectDataSourceSelectingEventHandler
Inserting, Updatinge Deleting.

Ocorrem antes de ser realizada uma operação de inserção, atualização ou eliminação.
ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventHandler
Selected

Ocorre depois de os dados serem recuperados.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
Inserted, Updatede Deleted.

Ocorrem após a conclusão da operação de inserção, atualização ou eliminação.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
ObjectDisposing.

Ocorre antes de um objeto comercial ser destruído.
ObjectDataSourceDisposingEventArgs ObjectDataSourceDisposingEventHandler

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)

Aplica-se a

Ver também