2007年05月31日

DataSetのカラムで列挙型を扱うには

   このエントリーをはてなブックマークに追加 Clip to Evernote
型付DataSetのテーブルのカラムの型を、int ではなく、独自の列挙型にするには、2つの方法がある。

ひとつは、型付DataSetの定義を行う場合に列のデータ型を列挙型に指定する方法。
これは、デザイナー画面で、DataTypeプロパティの値を System.Int32 などから、独自の型 Gushwell.Genderなどを指定してあげればよい。
ドロップダウンリストには現れないので、手入力になる。

もうひとつは、partial クラスを使う方法。

型付DataRowクラスの partialクラスを作成し、その中に、列挙子用のプロパティを定義し、データ変換コードを書けばよい。

例えば、Gender というカラムがあった場合、

public partial class MyRow : System.Data.DataRow {
public Gender EnumGender {
get {
try {
return (Gender)(this.Gender);
} catch {
return Gender.Unknown;
}
}
set {
this.Gender = (int)value;
}
}
}

のように書けば良い。C#からは、Genderカラムではなく、EnumGenderカラムを参照するようにする。こうすることで、間接的ではあるが、DBのカラムを列挙型として扱うことができる。

後者のやり方は、try-catchで例外処理を記述できるのがメリット。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50810947