を使用して詳細については、Googleで検索することができ
は、これを行うための最善の方法です。しかし、あなたがこれを望まない、あるいはできないような状況がいくつかあります。たとえば、型付きのDataSet
がサポートしていないnull可能な型のプロパティが必要な場合があります。 (入力されたDataSet
では、各NULL可能列もかなり陰惨である、Set<ColumnName>Null
とIs<ColumnName>Null
メソッドを持っています。)これらのケースでは
、あなたが入力したDataSet
が取るアプローチとほとんど同じをしたい:サブクラスDataRow
をして実装しますそこ特性、例えば:
public class MyDataRow : DataRow
{
public DateTime? SomeDate
{
get
{
return (this["SomeDate"] is DBNull)
? (DateTime?)null
: this.Field<DateTime>("SomeDate");
}
set
{
if (value == null)
{
this["SomeDate"] = DBNull.Value;
}
else
{
this["SomeDate"] = value;
}
}
}
}
は2つのことは、これを複雑にし、彼らが構築されているどのように新しい行としなければなりません。まず、あなたは基本コンストラクタを呼び出しMyDataTable
でコンストラクタを実装する必要があります。
public MyDataRow(DataRowBuilder rb) : base(rb) { }
セカンドを(これは紛らわしい部分です)、あなたもDataTable
をサブクラス化し、NewRowFromBuilder
メソッドをオーバーライドする必要があります。これはNewRow
方法は、実際に(NewRow
呼び出しNewRowFromBuilder
ため)MyDataRow
オブジェクトのDataRow
オブジェクトを返します。これを行わない場合は、NewRow
はDataRow
返しNewRowFromBuilder
の基本クラスの実装を呼び出します、そしてあなたはそれがMyDataRow
を返却する必要があります。
public class MyDataTable : DataTable
{
protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
{
return new MyDataRow(builder);
}
}
その後コードでこれらのオブジェクトを作成するために、あなたはこのようなものがあります:NewRow
は常にタイプDataRow
のオブジェクトを返しますので、あなたはまだ(NewRow
からの戻り値をキャストする必要があり
MyDataTable t = new MyDataTable();
MyDataRow r = (MyDataRow) t.NewRow();
注意を)。
MyDataTable
のイベントを処理する必要がある場合は、イベントハンドラをオーバーライドして、MyDataRow
オブジェクトのイベントを発生させる必要があります。実際には、生成されたコードDataSet
のコードを見て、これがどのように動作するかを確認する必要があります。
強く型指定されたデータセットを作成しようとしていますか? –
私はあなたのことを理解しているとは思わないが、あなたが言うことは、DataTableとDataRowのデフォルトの動作とどう違うのだろうか? –
どの.NET Frameworkのバージョンを使用していますか? –