ObjectDataSourceDisposingEventArgs 类     
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为 ObjectDisposing 控件的 ObjectDataSource 事件提供数据。
public ref class ObjectDataSourceDisposingEventArgs : System::ComponentModel::CancelEventArgspublic class ObjectDataSourceDisposingEventArgs : System.ComponentModel.CancelEventArgstype ObjectDataSourceDisposingEventArgs = class
    inherit CancelEventArgsPublic Class ObjectDataSourceDisposingEventArgs
Inherits CancelEventArgs- 继承
示例
本部分包含两个代码示例。 第一个 ObjectDataSource 代码示例演示如何将控件与业务对象和控件配合使用 GridView 来显示信息。 第二个代码示例提供第一个代码示例使用的示例中间层业务对象。
下面的代码示例演示如何将 ObjectDataSource 控件与业务对象和控件配合使用 GridView 来显示信息。 你可能使用非常昂贵的业务对象, () 为网页执行的每个数据操作创建的时间或资源。 使用昂贵对象的一种方法可能是创建一次它的实例,然后缓存它以供后续操作,而不是为每个数据操作创建和销毁它。 此示例演示了此模式。 可以处理 ObjectCreating 事件以先检查对象的缓存,然后创建一个实例,前提是尚未缓存一个实例。 然后,处理 ObjectDisposing 事件以缓存业务对象以供将来使用,而不是销毁它。 在此示例中, CancelEventArgs.Cancel 对象的 属性 ObjectDataSourceDisposingEventArgs 设置为 true,以指示 ObjectDataSource 不调用 Dispose 实例上的 方法。
<%@ 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>
下面的代码示例提供了前面的代码示例使用的示例中间层业务对象。 代码示例由 类定义 EmployeeLogic 的基本业务对象组成,该类是维护状态并封装业务逻辑的类。 对于完整的工作示例,必须将此代码编译为库,然后从 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
注解
在执行ObjectDataSourceDisposingEventArgs使用ObjectDataSource控件和业务对象的任何数据操作之后,但在销毁业务对象之前,在 方法中使用 OnObjectDisposing 类来提供对业务对象实例的访问。 使用 ObjectInstance 属性访问业务对象。 通过添加委托来处理 ObjectDisposing 事件,可以访问业务对象的任何公开成员,以执行任何最终工作或清理。
              OnObjectDisposing如果执行数据操作的 方法是 方法static,则 控件不会调用 ObjectDataSource 该方法。 当 方法为静态时,不会创建任何业务对象实例。
控件 ObjectDataSource 公开了许多事件,你可以在其生命周期的不同时间处理基础业务对象。 下表列出了事件以及关联的 EventArgs 类和事件处理程序委托。
| 事件 | EventArgs | EventHandler | 
|---|---|---|
| ObjectCreating. 紧接在创建业务对象的实例之前发生。 | ObjectDataSourceEventArgs | ObjectDataSourceObjectEventHandler | 
| ObjectCreated. 在创建业务对象的实例后立即发生。 | ObjectDataSourceEventArgs | ObjectDataSourceObjectEventHandler | 
| Selecting. 在检索数据之前发生。 | ObjectDataSourceSelectingEventArgs | ObjectDataSourceSelectingEventHandler | 
| Inserting、 Updating和 Deleting。 在执行插入、更新或删除操作之前发生。 | ObjectDataSourceMethodEventArgs | ObjectDataSourceMethodEventHandler | 
| Selected 在检索数据后发生。 | ObjectDataSourceStatusEventArgs | ObjectDataSourceStatusEventHandler | 
| Inserted、 Updated和 Deleted。 在完成插入、更新或删除操作后发生。 | ObjectDataSourceStatusEventArgs | ObjectDataSourceStatusEventHandler | 
| ObjectDisposing. 在销毁业务对象之前发生。 | ObjectDataSourceDisposingEventArgs | ObjectDataSourceDisposingEventHandler | 
构造函数
| ObjectDataSourceDisposingEventArgs(Object) | 使用指定的对象初始化 ObjectDataSourceDisposingEventArgs 类的新实例。 | 
属性
| Cancel | 获取或设置指示是否应取消事件的值。(继承自 CancelEventArgs) | 
| ObjectInstance | 获取一个对象,该对象表示 ObjectDataSource 控件用来执行数据操作的业务对象。 | 
方法
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |