DataTableってなれると結構なんだけど、これを継承することができるのを知ったので備忘録として残しておく。
ポイントはDataTable以外にDataRowについても継承し、DataTableについてはNewRow()とNewRowFromBuilder()メソッドをオーバーロード、DataRowについてはコンストラクタをオーバーライドする。
基本骨格をソースで示すとこうなる。
myDataRowクラス
Class myDataRow
Inherits Global.System.Data.DataRow
<global .system.diagnostics.debuggernonusercodeattribute=""> _
Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder)
MyBase.New(rb)
End Sub
End Class
myDataTableクラス
Class myDataTable
Inherits Global.System.Data.DataTable
'<global .system.diagnostics.debuggernonusercodeattribute=""> _
Protected Overrides Function NewRowFromBuilder(ByVal builder As Global.System.Data.DataRowBuilder) As Global.System.Data.DataRow
Return New myDataRow(builder)
End Function
Public Overloads Function NewRow() As DataRow
Return MyBase.NewRow
'Return Activator.CreateInstance(GetType(DataRowEx), builder)
End Function
End Class
DataRowを継承すると何が便利かというとデータ行にユーザーデータを持たせられる。
Class myDataRow
Inherits Global.System.Data.DataRow
friend m_data as UserData '←ここ
<global .system.diagnostics.debuggernonusercodeattribute=""> _
Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder)
MyBase.New(rb)
End Sub
End Class
RowDataだけ継承すると自身をNewできないので都合が悪く結局DataTable:NewRow()メソッドが必要になる。
こんだけ知っておくだけでDataGridViewの表示管理がかなり改善されるかと思う。
ちなみに使い方は下記の通り。
Dim r As myDataRow
Dim tb As New myDataTable
r = tb.NewRow
以上
0 件のコメント:
コメントを投稿