ASP.NETのObjectDataSourceコントロールのDataObjectType属性
3876 ワード
一、ObjectDataSourceコントロール説明
クラスの名前を取得または設定します.ObjectDataSourceコントロールは、データバインドコントロールから個別の値を渡すのではなく、データ操作のパラメータの更新、挿入、削除に使用します.
Update、Insert、Deleteメソッドに渡す複数のパラメータを指定するのではなく、複数のデータフィールドの値を累計するオブジェクトを作成できます.複数のパラメータではなく、メソッドにのみこのオブジェクトを渡します.
データ・バインディング・コントロールにバインドされているObjectDataSourceコントロールのデフォルトの動作は、データ・バインディング・コントロールがデータ・ソースの各パラメータに対してParameterオブジェクトを作成することです.ビジネス・オブジェクトに多くのフィールドがある場合、結果メソッドにも多くのフィールドがあります.DataObjectType属性を使用すると、各データフィールドに属性を持つタイプを指定できます.これにより、実行時にメソッドに複数のパラメータを渡すのではなく、オブジェクトを作成し、すべてのプロパティを設定します.このオブジェクトは、メソッド呼び出しのパラメータセットに追加されます.
二、DataObjectType属性の使用
DataObjectTypeNameプロパティで指定するタイプには、パラメータなしのデフォルトのコンストラクション関数が必要です.これにより、ObjectDataSourceコントロールでこのタイプのインスタンスを作成できます.このタイプには、ObjectDataSourceコントロールがデータバインドコントロールによって渡される値でオブジェクトを埋め込むように設定可能な属性も必要です.ObjectDataSourceコントロールのプロパティ名は、データバインドコントロールが渡す値のパラメータ名と完全に一致する必要があります.
DataObjectTypeNameプロパティが設定されており、ObjectDataSourceコントロールがデータバインドコントロールに関連付けられている場合、InsertMethodおよびDeleteMethodプロパティで指定する方法には、DataObjectTypeNameプロパティで指定したタイプのパラメータが1つずつ必要です.ConflictDetectionプロパティがOverwriteChanges値に設定されている場合、UpdateMethodプロパティによって指定されるメソッドには、DataObjectTypeプロパティで指定されたタイプのパラメータが必要です.コンフィギュレーション属性がCompareAllValues値に設定されている場合、UpdateMethod属性によって指定されるメソッドには、DataObjectType属性で指定されている2つのタイプのパラメータが必要です.最初のパラメータには元の値が含まれます.2番目のパラメータには新しい値が含まれます.
DataObjectTypeNameプロパティは、ObjectDataSourceコントロールに関連付けられたObjectDataSourceViewのDataObjectTypeNameプロパティに委任されます.
三、サンプルコード
次のコード例では、DataObjectTypeプロパティを使用して、すべてのパラメータ値を1つのオブジェクトにマージするタイプを実装する方法を示します.AggregateDataクラスの選択方法は、NameとNumberという2つのカラムを持つDataTableオブジェクトを返します.同様に、NewDataクラスは、2つの読み取り/書き込み属性NameとNumberを定義します.AggregateDataクラスのInsertメソッドには、NewDataタイプのパラメータがあります.ObjectDataSourceのType-Name属性はAggregateDataに設定され、DataObjectType-Name属性はNewDataに設定されます.
フロントコード:
クラスの名前を取得または設定します.ObjectDataSourceコントロールは、データバインドコントロールから個別の値を渡すのではなく、データ操作のパラメータの更新、挿入、削除に使用します.
Update、Insert、Deleteメソッドに渡す複数のパラメータを指定するのではなく、複数のデータフィールドの値を累計するオブジェクトを作成できます.複数のパラメータではなく、メソッドにのみこのオブジェクトを渡します.
データ・バインディング・コントロールにバインドされているObjectDataSourceコントロールのデフォルトの動作は、データ・バインディング・コントロールがデータ・ソースの各パラメータに対してParameterオブジェクトを作成することです.ビジネス・オブジェクトに多くのフィールドがある場合、結果メソッドにも多くのフィールドがあります.DataObjectType属性を使用すると、各データフィールドに属性を持つタイプを指定できます.これにより、実行時にメソッドに複数のパラメータを渡すのではなく、オブジェクトを作成し、すべてのプロパティを設定します.このオブジェクトは、メソッド呼び出しのパラメータセットに追加されます.
二、DataObjectType属性の使用
DataObjectTypeNameプロパティで指定するタイプには、パラメータなしのデフォルトのコンストラクション関数が必要です.これにより、ObjectDataSourceコントロールでこのタイプのインスタンスを作成できます.このタイプには、ObjectDataSourceコントロールがデータバインドコントロールによって渡される値でオブジェクトを埋め込むように設定可能な属性も必要です.ObjectDataSourceコントロールのプロパティ名は、データバインドコントロールが渡す値のパラメータ名と完全に一致する必要があります.
DataObjectTypeNameプロパティが設定されており、ObjectDataSourceコントロールがデータバインドコントロールに関連付けられている場合、InsertMethodおよびDeleteMethodプロパティで指定する方法には、DataObjectTypeNameプロパティで指定したタイプのパラメータが1つずつ必要です.ConflictDetectionプロパティがOverwriteChanges値に設定されている場合、UpdateMethodプロパティによって指定されるメソッドには、DataObjectTypeプロパティで指定されたタイプのパラメータが必要です.コンフィギュレーション属性がCompareAllValues値に設定されている場合、UpdateMethod属性によって指定されるメソッドには、DataObjectType属性で指定されている2つのタイプのパラメータが必要です.最初のパラメータには元の値が含まれます.2番目のパラメータには新しい値が含まれます.
DataObjectTypeNameプロパティは、ObjectDataSourceコントロールに関連付けられたObjectDataSourceViewのDataObjectTypeNameプロパティに委任されます.
三、サンプルコード
次のコード例では、DataObjectTypeプロパティを使用して、すべてのパラメータ値を1つのオブジェクトにマージするタイプを実装する方法を示します.AggregateDataクラスの選択方法は、NameとNumberという2つのカラムを持つDataTableオブジェクトを返します.同様に、NewDataクラスは、2つの読み取り/書き込み属性NameとNumberを定義します.AggregateDataクラスのInsertメソッドには、NewDataタイプのパラメータがあります.ObjectDataSourceのType-Name属性はAggregateDataに設定され、DataObjectType-Name属性はNewDataに設定されます.
フロントコード:
ObjectDataSource - DataObjectTypeName Property Example
バックグラウンドコード:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace Samples.AspNet.CS
{
///
/// Summary description for AggregateData
///
public class AggregateData
{
public AggregateData()
{
}
static DataTable table;
private DataTable CreateData()
{
table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Number", typeof(int));
table.Rows.Add(new object[] { "one", 1 });
table.Rows.Add(new object[] { "two", 2 });
table.Rows.Add(new object[] { "three", 3 });
return table;
}
public DataTable Select()
{
if (table == null)
{
return CreateData();
}
else
{
return table;
}
}
public int Insert(NewData newRecord)
{
table.Rows.Add(new object[] { newRecord.Name, newRecord.Number });
return 1;
}
}
public class NewData
{
private string nameValue;
private int numberValue;
public string Name
{
get { return nameValue; }
set { nameValue = value; }
}
public int Number
{
get { return numberValue; }
set { numberValue = value; }
}
}
}