ObjectDataSourceDisposingEventArgs 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供 ObjectDisposing 控制項的 ObjectDataSource 事件資料。
public ref class ObjectDataSourceDisposingEventArgs : System::ComponentModel::CancelEventArgs
public class ObjectDataSourceDisposingEventArgs : System.ComponentModel.CancelEventArgs
type ObjectDataSourceDisposingEventArgs = class
inherit CancelEventArgs
Public 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 用於 方法中 OnObjectDisposing ,可在執行使用 ObjectDataSource 控制項和商務物件的任何資料作業之後,但在終結商務物件之前,提供對商務物件實例的存取權。 商務物件是使用 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) |