Condividi tramite


ObjectDataSourceDisposingEventArgs Classe

Definizione

Fornisce i dati per l'evento ObjectDisposing del controllo ObjectDataSource.

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

Esempio

In questa sezione sono riportati due esempi di codice. Nel primo esempio di codice viene illustrato come utilizzare un ObjectDataSource controllo con un oggetto business e un GridView controllo per visualizzare le informazioni. Il secondo esempio di codice fornisce l'oggetto business di livello intermedio di esempio usato dal primo esempio di codice.

Nell'esempio di codice seguente viene illustrato come utilizzare un ObjectDataSource controllo con un oggetto business e un GridView controllo per visualizzare le informazioni. È possibile usare un oggetto business molto costoso (in termini di tempo o risorse) da creare per ogni operazione di dati eseguita dalla pagina Web. Un modo per lavorare con un oggetto costoso potrebbe essere creare un'istanza di tale oggetto una sola volta e quindi memorizzarlo nella cache per le operazioni successive anziché crearlo ed eliminarlo per ogni operazione di dati. In questo esempio viene illustrato questo modello. È possibile gestire l'evento ObjectCreating per controllare innanzitutto la cache di un oggetto e quindi creare un'istanza, solo se non ne è già memorizzata nella cache. Gestire quindi l'evento per memorizzare nella ObjectDisposing cache l'oggetto business per un uso futuro, anziché eliminarlo. In questo esempio la CancelEventArgs.Cancel proprietà dell'oggetto ObjectDataSourceDisposingEventArgs è impostata su true, per indicare ObjectDataSource a di non chiamare il Dispose metodo nell'istanza di .

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

Nell'esempio di codice seguente viene fornito un esempio di oggetto business di livello intermedio usato dall'esempio di codice precedente. L'esempio di codice è costituito da un oggetto business di base, definito dalla EmployeeLogic classe , che è una classe che mantiene lo stato e incapsula la logica di business. Per un esempio funzionante completo, è necessario compilare questo codice come libreria e quindi usare queste classi da una pagina 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

Commenti

La ObjectDataSourceDisposingEventArgs classe viene utilizzata nel OnObjectDisposing metodo per fornire l'accesso all'istanza dell'oggetto business dopo l'esecuzione di tutte le operazioni sui dati che usano il controllo e l'oggetto ObjectDataSource business, ma prima che l'oggetto business venga eliminato definitivamente. L'oggetto business è accessibile tramite la ObjectInstance proprietà . Aggiungendo un delegato per gestire l'evento ObjectDisposing , è possibile accedere a tutti i membri esposti pubblicamente dell'oggetto business per eseguire qualsiasi lavoro finale o pulizia.

Il OnObjectDisposing metodo non viene chiamato dal ObjectDataSource controllo , se il metodo che esegue operazioni sui dati è un static metodo . Nessuna istanza dell'oggetto business viene creata quando il metodo è statico.

Il ObjectDataSource controllo espone molti eventi che è possibile gestire per lavorare con l'oggetto business sottostante in vari momenti del ciclo di vita. Nella tabella seguente sono elencati gli eventi e le classi associate EventArgs e i delegati del gestore eventi.

Evento EventArgs Eventhandler
ObjectCreating.

Si verifica immediatamente prima della creazione dell'istanza dell'oggetto business.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
ObjectCreated.

Si verifica immediatamente dopo la creazione dell'istanza dell'oggetto business.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
Selecting.

Si verifica prima del recupero dei dati.
ObjectDataSourceSelectingEventArgs ObjectDataSourceSelectingEventHandler
Inserting, Updatinge Deleting.

Si verifica prima dell'esecuzione di un'operazione di inserimento, aggiornamento o eliminazione.
ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventHandler
Selected

Si verifica dopo il recupero dei dati.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
Inserted, Updatede Deleted.

Si verifica dopo il completamento dell'operazione di inserimento, aggiornamento o eliminazione.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
ObjectDisposing.

Si verifica prima che un oggetto business venga eliminato definitivamente.
ObjectDataSourceDisposingEventArgs ObjectDataSourceDisposingEventHandler

Costruttori

ObjectDataSourceDisposingEventArgs(Object)

Inizializza una nuova istanza della classe ObjectDataSourceDisposingEventArgs utilizzando l'oggetto specificato.

Proprietà

Cancel

Ottiene o imposta un valore che indica se l'evento debba essere annullato.

(Ereditato da CancelEventArgs)
ObjectInstance

Ottiene un oggetto che rappresenta l'oggetto business con cui il controllo ObjectDataSource esegue le operazioni sui dati.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche