ObjectDataSourceDisposingEventArgs Clase

Definición

Proporciona datos para el evento ObjectDisposing del control ObjectDataSource.

public ref class ObjectDataSourceDisposingEventArgs : System::ComponentModel::CancelEventArgs
public class ObjectDataSourceDisposingEventArgs : System.ComponentModel.CancelEventArgs
type ObjectDataSourceDisposingEventArgs = class
    inherit CancelEventArgs
Public Class ObjectDataSourceDisposingEventArgs
Inherits CancelEventArgs
Herencia
ObjectDataSourceDisposingEventArgs

Ejemplos

Esta sección contiene dos ejemplos de código. En el primer ejemplo de código se muestra cómo usar un ObjectDataSource control con un objeto de negocio y un GridView control para mostrar información. En el segundo ejemplo de código se proporciona el objeto de negocio de nivel intermedio de ejemplo que usa el primer ejemplo de código.

En el ejemplo de código siguiente se muestra cómo usar un ObjectDataSource control con un objeto de negocio y un GridView control para mostrar información. Es posible que trabaje con un objeto de negocio que sea muy costoso (en términos de tiempo o recursos) para crear para cada operación de datos que realice la página web. Una manera de trabajar con un objeto costoso podría ser crear una instancia de ella una vez y, a continuación, almacenarla en caché para las operaciones posteriores en lugar de crearla y destruirla para cada operación de datos. En este ejemplo se muestra este patrón. Puede controlar el ObjectCreating evento para comprobar primero la memoria caché de un objeto y, a continuación, crear una instancia, solo si aún no está almacenada en caché. A continuación, controle el ObjectDisposing evento para almacenar en caché el objeto de negocio para su uso futuro, en lugar de destruirlo. En este ejemplo, la CancelEventArgs.Cancel propiedad del ObjectDataSourceDisposingEventArgs objeto se establece trueen , para dirigir a ObjectDataSource que no llame al Dispose método en la instancia de .

<%@ 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>

En el ejemplo de código siguiente se proporciona un objeto de negocio de nivel intermedio de ejemplo que usa el ejemplo de código anterior. El ejemplo de código consta de un objeto de negocio básico, definido por la EmployeeLogic clase , que es una clase que mantiene el estado y encapsula la lógica de negocios. Para obtener un ejemplo funcional completo, debe compilar este código como una biblioteca y, a continuación, usar estas clases desde una 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

Comentarios

La ObjectDataSourceDisposingEventArgs clase se usa en el OnObjectDisposing método para proporcionar acceso a la instancia de objeto de negocio después de realizar cualquier operación de datos que use el control y el ObjectDataSource objeto de negocio, pero antes de que se destruya el objeto de negocio. Se tiene acceso al objeto de negocio mediante la ObjectInstance propiedad . Al agregar un delegado para controlar el ObjectDisposing evento, puede acceder a los miembros expuestos públicamente del objeto de negocio para realizar cualquier trabajo final o limpiarlo.

El OnObjectDisposing control no llama al ObjectDataSource método si el método que realiza operaciones de datos es un static método . No se crea ninguna instancia de objeto de negocio cuando el método es estático.

El ObjectDataSource control expone muchos eventos que puede controlar para trabajar con el objeto de negocio subyacente en varias ocasiones en su ciclo de vida. En la tabla siguiente se enumeran los eventos y las clases asociadas EventArgs y los delegados del controlador de eventos.

evento EventArgs EventHandler
ObjectCreating.

Se produce inmediatamente antes de crear la instancia del objeto de negocio.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
ObjectCreated.

Se produce inmediatamente después de crear la instancia del objeto de negocio.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
Selecting.

Se produce antes de recuperar los datos.
ObjectDataSourceSelectingEventArgs ObjectDataSourceSelectingEventHandler
Inserting, Updatingy Deleting.

Se produce antes de realizar una operación de inserción, actualización o eliminación.
ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventHandler
Selected

Se produce después de recuperar los datos.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
Inserted, Updatedy Deleted.

Se produce una vez completada la operación de inserción, actualización o eliminación.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
ObjectDisposing.

Se produce antes de que se destruya un objeto de negocio.
ObjectDataSourceDisposingEventArgs ObjectDataSourceDisposingEventHandler

Constructores

ObjectDataSourceDisposingEventArgs(Object)

Inicializa una nueva instancia de la clase ObjectDataSourceDisposingEventArgs usando el objeto especificado.

Propiedades

Cancel

Obtiene o establece un valor que indica si se debe cancelar el evento.

(Heredado de CancelEventArgs)
ObjectInstance

Obtiene un objeto que representa el objeto comercial con el que realiza operaciones de datos el control ObjectDataSource.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también