型付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で例外処理を記述できるのがメリット。