読者です 読者をやめる 読者になる 読者になる

bigLiBox

備忘録だったり。読書メモだったり。ところで仕事が終わりそうにないんですが。

DataTableのカラム名(ColumnName)をEnumで定義し、DataTableに列(DataColumn)を追加する

【備忘録】 【備忘録】-vb.net

コードマスタの情報をCSVファイルに定義しておいて、
CSVファイルを読込んでDataTable型でファイル内容を取得し保持したりすることがある。

そこでDataTableのカラム名を列挙したEnumと、ファイル内容を保持するメンバ変数を定義しておいて、

#Region "Enum"
    ''' <summary>
    ''' マスタテーブル項目
    ''' </summary>
    Enum MasterTableColumn As Integer
         Code
         Meishou
         Ryakushou
    End Enum
#End Region

#Region "メンバ変数"
    ''' <summary>
    ''' マスタテーブルデータ
    ''' </summary>
    Private masterTableData As DataTable
#End Region

メンバ変数を初期化する時に、以下のようにDataTableにEnumのメンバー分、DataColumを追加するコードを書いてた。

'メンバ変数の初期化
Me.masterTableData = New DataTable()
Me.masterTableData.Columns.Add(New DataColumn(MasterTableColumn.Code.ToString(), GetType(String)))
Me.masterTableData.Columns.Add(New DataColumn(MasterTableColumn.Meishou.ToString(), GetType(String)))
Me.masterTableData.Columns.Add(New DataColumn(MasterTableColumn.Ryakushou.ToString(), GetType(String)))

でも正直こんなの書くのカラム3個くらいが限界。と思ってたけど、
[列挙体の一覧を foreach を使って取得する方法]とやらを使えば、簡単かも。

Me.masterTableData = New DataTable()
For Each val As MasterTableColumn In [Enum].GetValues(GetType(MasterTableColumn))
    Me.masterTableData.Columns.Add(New DataColumn(val.ToString(), GetType(String)))
Next

すごくスッキリ。
問題は、これ実際に意図した通りに動作するのかまだ検証してないことだな。


参考: