ObjectDataSource.DeleteMethod プロパティ
アセンブリ: System.Web (system.web.dll 内)

Dim instance As ObjectDataSource Dim value As String value = instance.DeleteMethod instance.DeleteMethod = value
/** @property */ public String get_DeleteMethod () /** @property */ public void set_DeleteMethod (String value)
ObjectDataSource がデータを削除するために使用するメソッドまたは関数の名前を表す文字列。既定値は空の文字列 ("") です。

ビジネス オブジェクトは、バッチではなく、一度に 1 レコードずつデータを削除することを前提としています。
DeleteMethod プロパティは、ObjectDataSource コントロールに関連付けられた ObjectDataSourceView オブジェクトの DeleteMethod プロパティに処理を代行させます。
オブジェクトの有効期間DeleteMethod プロパティで識別されるメソッドには、インスタンス メソッドまたは static (Visual Basic の場合は Shared) メソッドを指定できます。インスタンス メソッドの場合は、DeleteMethod プロパティが呼び出されるたびにビジネス オブジェクトが作成され、破棄されます。ObjectCreated イベントと ObjectCreating イベントを処理することで、DeleteMethod プロパティが呼び出される前にビジネス オブジェクトを使用できます。DeleteMethod プロパティが呼び出された後に発生する ObjectDisposing イベントを処理することもできます。ビジネス オブジェクトが IDisposable インターフェイスを実装している場合は、オブジェクトが破棄される前に Dispose メソッドが呼び出されます。メソッドが static (Visual Basic では Shared) メソッドの場合、ビジネス オブジェクトは作成されず、ObjectCreated、ObjectCreating、ObjectDisposing の各イベントを処理できません。
パラメータは、次の 3 つのソースから DeleteParameters コレクションに追加されます。
まず、データ バインド コントロールから生成されたパラメータが DeleteParameters コレクションに追加されます。たとえば、ObjectDataSource コントロールが Name 列と Number 列を持つ GridView コントロールにバインドされている場合、Name および Number に対応するパラメータがコレクションに追加されます。パラメータの正確な名前は、OldValuesParameterFormatString プロパティによって決まります。これらのパラメータのデータ型は string です。次に、DeleteParameters 要素にリストされたパラメータが追加されます。DeleteParameters 要素のパラメータが DeleteParameters コレクション内の既存のパラメータと同じ名前で存在する場合、DeleteParameters 要素で指定されたパラメータと一致するように既存のパラメータが変更されます。通常、これはパラメータのデータの型を変更するために使用されます。最後に、Deleting イベントでプログラムによってパラメータを追加および削除できます。このイベントは、Delete メソッドが実行される前に発生します。メソッドは、パラメータがマージされた後に解決されます。メソッドの解決については、次のセクションで説明します。
Delete メソッドが呼び出されると、データ バインド コントロールのデータ フィールド、DeleteParameters 要素で宣言によって作成されたパラメータ、および Deleting イベント ハンドラで追加されたパラメータがすべてマージされます (詳細については、前のセクションを参照してください)。次に、ObjectDataSource オブジェクトは、呼び出すメソッドの検索を試みます。まず、DeleteMethod プロパティで指定された名前を持つ 1 つ以上のメソッドが検索されます。一致するメソッドが見つからない場合、InvalidOperationException 例外がスローされます。一致するメソッドが見つかった場合は、一致するパラメータ名が検索されます。たとえば、TypeName プロパティで指定された型に、DeleteARecord という名前のメソッドが 2 つあるとします。一方の DeleteARecord には、ID というパラメータが 1 つあり、もう一方の DeleteARecord には、Name と Number という 2 つのパラメータがあります。DeleteParameters コレクションに ID という名前のパラメータが 1 つしかない場合、ID パラメータだけを持つ DeleteARecord メソッドが呼び出されます。メソッドの解決時に、パラメータの型はチェックされません。パラメータの順序は重要ではありません。
DataObjectTypeName プロパティが設定されている場合には、メソッドは別の方法で解決されます。ObjectDataSource は、DataObjectTypeName プロパティで指定された型のパラメータを 1 つ受け取る DeleteMethod プロパティで指定された名前のメソッドを検索します。この場合、パラメータの名前は重要ではありません。
Topic | Location |
---|---|
方法 : ユーザーが DataList Web サーバー コントロール内の項目を削除できるようにする | ASP .NET Web アプリケーションの作成 |

このセクションには、2 つのコード例が含まれています。1 つ目のコード例では、ビジネス オブジェクトおよび GridView コントロールで、ObjectDataSource オブジェクトを使用してデータを削除する方法を示します。2 つ目のコード例では、1 つ目のコード例で使用されている EmployeeLogic クラスを示します。
ビジネス オブジェクトおよび GridView コントロールで、ObjectDataSource コントロールを使用してデータを削除する方法を次のコード例に示します。GridView コントロールは、SelectMethod プロパティで指定されたメソッドを使用して EmployeeLogic オブジェクトからデータを取得し、最初に全従業員を表示します。AutoGenerateDeleteButton プロパティが true に設定されているため、GridView コントロールは自動的に削除ボタンを表示します。
[削除] ボタンをクリックすると、DeleteMethod プロパティで指定されたメソッド、および DeleteParameters コレクションで指定されたパラメータを使用して、削除操作が実行されます。このコード例では、プリプロセスとポスト プロセスのステップも一部実行されます。操作の実行前に Deleting イベントを処理する場合は、NorthwindEmployeeDeleting デリゲートが呼び出されます。また、例外処理を実行するために、操作の完了後に Deleted イベントを処理する場合は、NorthwindEmployeeDeleted デリゲートが呼び出されます。この例では、NorthwindDataException がスローされた場合、NorthwindDataException デリゲートによって処理されます。
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %> <%@ Import namespace="Samples.AspNet.VB" %> <%@ Page language="vb" %> <Script runat="server"> ' Called before a Delete operation. Private Sub NorthwindEmployeeDeleting(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs) ' The GridView passes the ID of the employee ' to be deleted. However, the business object, EmployeeLogic , ' requires a NorthwindEmployee parameter, named "ne". Create ' it now and add it to the parameters collection. Dim paramsFromPage As IDictionary = e.InputParameters If Not paramsFromPage("EmpID") Is Nothing Then Dim ne As New NorthwindEmployee(paramsFromPage("EmpID").ToString()) ' Remove the old EmpID parameter. paramsFromPage.Clear() paramsFromPage.Add("ne", ne) End If End Sub ' NorthwindEmployeeDeleting ' Called after a Delete operation. Private Sub NorthwindEmployeeDeleted(ByVal source As Object, ByVal e As ObjectDataSourceStatusEventArgs) ' Handle the Exception if it is a NorthwindDataException. If Not e.Exception Is Nothing Then ' Handle the specific exception type. The ObjectDataSource wraps ' any Exceptions in a TargetInvokationException wrapper, so ' check the InnerException property for the expected Exception types. If e.Exception.InnerException.GetType().Equals(GetType(NorthwindDataException)) Then Label1.Text = e.Exception.InnerException.Message ' Because the exception is handled, there is ' no reason to throw it. e.ExceptionHandled = True End If End If End Sub ' NorthwindEmployeeDeleted </Script> <html> <head> <title>ObjectDataSource - VB Example</title> </head> <body> <form id="Form1" method="post" runat="server"> <asp:gridview id="GridView1" runat="server" datasourceid="ObjectDataSource1" autogeneratedeletebutton="true" autogeneratecolumns="false" datakeynames="EmpID"> <columns> <asp:boundfield headertext="EmpID" datafield="EmpID" /> <asp:boundfield headertext="First Name" datafield="FirstName" /> <asp:boundfield headertext="Last Name" datafield="LastName" /> </columns> </asp:gridview> <asp:objectdatasource id="ObjectDataSource1" runat="server" selectmethod="GetAllEmployees" deletemethod="DeleteEmployee" ondeleting="NorthwindEmployeeDeleting" ondeleted="NorthwindEmployeeDeleted" typename="Samples.AspNet.VB.EmployeeLogic"> <deleteparameters> <asp:parameter name="EmpID" type="Int32" /> </deleteparameters> </asp:objectdatasource> <asp:label id="Label1" runat="server" /> </form> </body> </html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %> <%@ Import namespace="Samples.AspNet.CS" %> <%@ Page language="c#" %> <Script runat="server"> private void NorthwindEmployeeDeleting(object source, ObjectDataSourceMethodEventArgs e) { // The GridView passes the ID of the employee // to be deleted. However, the buisiness object, EmployeeLogic, // requires a NorthwindEmployee parameter, named "ne". Create // it now and add it to the parameters collection. IDictionary paramsFromPage = e.InputParameters; if (paramsFromPage["EmpID"] != null) { NorthwindEmployee ne = new NorthwindEmployee( Int32.Parse(paramsFromPage["EmpID"].ToString())); // Remove the old EmpID parameter. paramsFromPage.Clear(); paramsFromPage.Add("ne", ne); } } private void NorthwindEmployeeDeleted(object source, ObjectDataSourceStatusEventArgs e) { // Handle the Exception if it is a NorthwindDataException if (e.Exception != null) { // Handle the specific exception type. The ObjectDataSource wraps // any Exceptions in a TargetInvokationException wrapper, so // check the InnerException property for expected Exception types. if (e.Exception.InnerException is NorthwindDataException) { Label1.Text = e.Exception.InnerException.Message; // Because the exception is handled, there is // no reason to throw it. e.ExceptionHandled = 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" autogeneratedeletebutton="true" autogeneratecolumns="false" datakeynames="EmpID"> <columns> <asp:boundfield headertext="EmpID" datafield="EmpID" /> <asp:boundfield headertext="First Name" datafield="FirstName" /> <asp:boundfield headertext="Last Name" datafield="LastName" /> </columns> </asp:gridview> <asp:objectdatasource id="ObjectDataSource1" runat="server" selectmethod="GetAllEmployees" deletemethod="DeleteEmployee" ondeleting="NorthwindEmployeeDeleting" ondeleted="NorthwindEmployeeDeleted" typename="Samples.AspNet.CS.EmployeeLogic"> <deleteparameters> <asp:parameter name="EmpID" type="Int32" /> </deleteparameters> </asp:objectdatasource> <asp:label id="Label1" runat="server" /> </form> </body> </html>
前のコード例で使用されている EmployeeLogic クラスを次のコード例に示します。
Imports System Imports System.Collections Imports System.Configuration Imports System.Data Imports System.Data.SqlClient Imports System.Web.UI Imports System.Web.UI.WebControls Namespace Samples.AspNet.VB ' ' EmployeeLogic is a stateless business object that encapsulates ' the operations you can perform on a NorthwindEmployee object. Public Class EmployeeLogic ' Return a collection of NorthwindEmployee objects. Public Shared Function GetAllEmployees() As ICollection Dim al As New ArrayList() ' Use the SqlDataSource class to wrap the ' ADO.NET code required to query the database. Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection") Dim sds As New SqlDataSource(cts.ConnectionString, _ "SELECT EmployeeID FROM Employees") Try Dim IDs As IEnumerable = sds.Select(DataSourceSelectArguments.Empty) ' Iterate through the Enumeration and create a ' NorthwindEmployee object for each ID. Dim enumerator As IEnumerator = IDs.GetEnumerator() While enumerator.MoveNext() ' The IEnumerable contains DataRowView objects. Dim row As DataRowView = CType(enumerator.Current ,DataRowView) Dim id As String = row("EmployeeID").ToString() Dim nwe As New NorthwindEmployee(id) ' Add the NorthwindEmployee object to the collection. al.Add(nwe) End While Finally ' If anything strange happens, clean up. sds.Dispose() End Try Return al End Function 'GetAllEmployees Public Shared Function GetEmployee(anID As Object) As NorthwindEmployee Return New NorthwindEmployee(anID) End Function 'GetEmployee Public Shared Sub DeleteEmployee(ne As NorthwindEmployee) Dim retval As Boolean = ne.Delete() If Not retval Then Throw New NorthwindDataException("Employee delete failed.") End If ' Delete the object in memory. ne = Nothing End Sub 'DeleteEmployee Public Shared Sub DeleteEmployeeByID(anID As Integer) Dim tempEmp As New NorthwindEmployee(anID) DeleteEmployee(tempEmp) End Sub 'DeleteEmployeeByID End Class 'EmployeeLogic Public Class NorthwindEmployee Public Sub New() ID = DBNull.Value aLastName = "" aFirstName = "" End Sub 'New Public Sub New(anID As Object) Me.ID = anID Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection") Dim conn As New SqlConnection(cts.ConnectionString) Dim sc As New SqlCommand(" SELECT FirstName,LastName " & _ " FROM Employees " & _ " WHERE EmployeeID = @empId", conn) ' Add the employee ID parameter and set its value. sc.Parameters.Add(New SqlParameter("@empId", SqlDbType.Int)).Value = Int32.Parse(anID.ToString()) Dim sdr As SqlDataReader = Nothing Try conn.Open() sdr = sc.ExecuteReader() ' This is not a while loop. It only loops once. If Not (sdr Is Nothing) AndAlso sdr.Read() Then ' The IEnumerable contains DataRowView objects. Me.aFirstName = sdr("FirstName").ToString() Me.aLastName = sdr("LastName").ToString() Else Throw New NorthwindDataException("Data not loaded for employee id.") End If Finally Try If Not (sdr Is Nothing) Then sdr.Close() End If conn.Close() Catch se As SqlException ' Log an event in the Application Event Log. Throw End Try End Try End Sub 'New Private ID As Object Public ReadOnly Property EmpID() As Object Get Return ID End Get End Property Private aLastName As String Public Property LastName() As String Get Return aLastName End Get Set aLastName = value End Set End Property Private aFirstName As String Public Property FirstName() As String Get Return aFirstName End Get Set aFirstName = value End Set End Property Public Function Delete() As Boolean If ID.Equals(DBNull.Value) Then ' The Employee object is not persisted. Return True Else ' The Employee object is persisted. ' Use the SqlDataSource control as a convenient wrapper for ' the ADO.NET code needed to delete a record from the database. Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection") Dim sds As New SqlDataSource() Try sds.ConnectionString = cts.ConnectionString sds.DeleteCommand = "DELETE FROM Employees WHERE EmployeeID=@empID" sds.DeleteParameters.Add(New Parameter("empID", TypeCode.Int32, Me.ID.ToString())) ' Implement the remainder of the Delete() method. ' Throw New NorthwindDataException("Delete() method not completely implemented.") Return True Finally ' Clean up resources. sds.Dispose() End Try End If End Function 'Delete End Class 'NorthwindEmployee Public Class NorthwindDataException Inherits Exception Public Sub New(msg As String) MyBase.New(msg) End Sub 'New End Class 'NorthwindDataException End Namespace
namespace Samples.AspNet.CS { using System; using System.Collections; using System.Configuration; using System.Data; using System.Data.SqlClient; 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 { // Returns a collection of NorthwindEmployee objects. public static ICollection GetAllEmployees () { ArrayList al = new ArrayList(); // Use the SqlDataSource class to wrap the // ADO.NET code required to query the database. ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"]; SqlDataSource sds = new SqlDataSource(cts.ConnectionString, "SELECT EmployeeID FROM Employees"); try { IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty); // Iterate through the Enumeration and create a // NorthwindEmployee object for each ID. IEnumerator enumerator = IDs.GetEnumerator(); while (enumerator.MoveNext()) { // The IEnumerable contains DataRowView objects. DataRowView row = enumerator.Current as DataRowView; string id = row["EmployeeID"].ToString(); NorthwindEmployee nwe = new NorthwindEmployee(id); // Add the NorthwindEmployee object to the collection. al.Add(nwe); } } finally { // If anything strange happens, clean up. sds.Dispose(); } return al; } public static NorthwindEmployee GetEmployee(object anID) { return new NorthwindEmployee(anID); } public static void DeleteEmployee(NorthwindEmployee ne) { bool retval = ne.Delete(); if (! retval) { throw new NorthwindDataException("Employee delete failed."); } // Delete the object in memory. ne = null; } public static void DeleteEmployeeByID(int anID) { NorthwindEmployee tempEmp = new NorthwindEmployee(anID); DeleteEmployee(tempEmp); } } public class NorthwindEmployee { public NorthwindEmployee () { ID = DBNull.Value; lastName = ""; firstName = ""; } public NorthwindEmployee (object anID) { this.ID = anID; ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"]; SqlConnection conn = new SqlConnection (cts.ConnectionString); SqlCommand sc = new SqlCommand(" SELECT FirstName,LastName " + " FROM Employees " + " WHERE EmployeeID = @empId", conn); // Add the employee ID parameter and set its value. sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString()); SqlDataReader sdr = null; try { conn.Open(); sdr = sc.ExecuteReader(); // This is not a while loop. It only loops once. if (sdr != null && sdr.Read()) { // The IEnumerable contains DataRowView objects. this.firstName = sdr["FirstName"].ToString(); this.lastName = sdr["LastName"].ToString(); } else { throw new NorthwindDataException("Data not loaded for employee id."); } } finally { try { if (sdr != null) sdr.Close(); conn.Close(); } catch (SqlException) { // Log an event in the Application Event Log. throw; } } } private object ID; public object EmpID { get { return ID; } } private string lastName; public string LastName { get { return lastName; } set { lastName = value; } } private string firstName; public string FirstName { get { return firstName; } set { firstName = value; } } public bool Delete () { if (ID.Equals(DBNull.Value)) { // The Employee object is not persisted. return true; } else { // The Employee object is persisted. // Use the SqlDataSource control as a convenient wrapper for // the ADO.NET code needed to delete a record from the database. ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"]; SqlDataSource sds = new SqlDataSource(); try { sds.ConnectionString = cts.ConnectionString; sds.DeleteCommand = "DELETE FROM Employees WHERE EmployeeID=@empID"; sds.DeleteParameters.Add(new Parameter("empID" ,TypeCode.Int32,this.ID.ToString())); // // Implement the remainder of the Delete() method. // throw new NorthwindDataException("Delete() method not completely implemented."); } finally { // Clean up resources. sds.Dispose(); } } } } public class NorthwindDataException: Exception { public NorthwindDataException(string msg) : base (msg) { } } }

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からObjectDataSource.DeleteMethod プロパティを検索する場合は、下記のリンクをクリックしてください。

- ObjectDataSource.DeleteMethod プロパティのページへのリンク