Exporter (0) Imprimer
Développer tout

ObjectDataSource.ObjectDisposing, événement

Remarque : cet événement est nouveau dans le .NET Framework version 2.0.

Se produit avant que l'objet identifié par la propriété TypeName ne soit ignoré.

Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)

public event ObjectDataSourceDisposingEventHandler ObjectDisposing
/** @event */
public void add_ObjectDisposing (ObjectDataSourceDisposingEventHandler value)

/** @event */
public void remove_ObjectDisposing (ObjectDataSourceDisposingEventHandler value)

JScript prend en charge l'utilisation d'événements mais pas la déclaration de nouveaux événements.

L'événement ObjectDisposing est toujours déclenché avant que l'instance de l'objet métier ne soit ignorée. Si l'objet métier implémente l'interface IDisposable, la méthode Dispose est appelée une fois que l'événement a été déclenché.

Gérez l'événement ObjectDisposing pour appeler d'autres méthodes sur l'objet et définir des propriétés ou exécuter un nettoyage spécifique à l'objet avant que l'objet ne soit détruit. Une référence à l'objet est accessible par la propriété ObjectInstance, qui est exposée par l'objet ObjectDataSourceEventArgs.

Pour plus d'informations sur la gestion des événements, consultez Consommation d'événements.

Cette section comprend deux exemples de code. Le premier exemple de code illustre comment utiliser un objet ObjectDataSource avec un objet métier et un contrôle GridView pour afficher des informations. Le deuxième exemple de code fournit l'objet métier de couche intermédiaire utilisé dans le premier exemple de code.

L'exemple de code suivant montre comment utiliser un contrôle ObjectDataSource avec un objet métier et un contrôle GridView pour afficher des informations. Vous pouvez travailler avec un objet métier qui est très coûteux (en termes de temps ou de ressources) à créer pour chaque opération de données effectuée par votre page Web. Une façon de travailler avec un objet coûteux consiste à en créer une instance une fois, puis à la mettre en cache pour les opérations suivantes plutôt que de la créer et de la détruire à chaque opération de données. Cet exemple illustre ce modèle. Vous pouvez gérer l'événement ObjectCreating de façon à vérifier d'abord la présence d'un objet dans le cache et en créer une instance uniquement s'il ne s'y trouve pas déjà. Gérez ensuite l'événement ObjectDisposing pour mettre en cache l'objet métier en vue d'une utilisation ultérieure au lieu de le détruire. Dans cet exemple de code, la propriété CancelEventArgs.Cancel de l'objet ObjectDataSourceDisposingEventArgs a la valeur true pour indiquer à ObjectDataSource de ne pas appeler la méthode Dispose sur l'objet.

<%@ Import namespace="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<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>
  <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>

L'exemple de code suivant fournit l'exemple d'objet métier de couche intermédiaire utilisé par l'exemple de code précédent. L'exemple de code se compose d'un objet métier de base défini par la classe EmployeeLogic qui est une classe avec état qui encapsule la logique métier. Pour obtenir un exemple de travail complet, vous devez compiler ce code comme une bibliothèque et utiliser ces classes à partir d'une page ASP.NET (fichier .aspx).

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;
    }
  }
}

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft