>他に方法ってないですか?
おそらく無いかと思います。
極力シンプルにしたいのであれば、関数化してあげると、メイン部のコードが多少ダイエットできると思います。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As New DataTable("aaa")
Dim dc1 As New DataColumn("日付1", Type.GetType("System.DateTime"))
Dim dc2 As New DataColumn("日付2", Type.GetType("System.DateTime"))
dt.Columns.AddRange(New DataColumn() {dc1, dc2})
dt.Rows.Add(New Object() {"2006/05/10 14:00:00", "2006/05/11 14:00:00"})
DataGrid1.DataSource = dt
Dim ts As New DataGridTableStyle()
ts.MappingName = dt.TableName
ts.GridColumnStyles.Add(取得_TextBoxColumn(dc1))
ts.GridColumnStyles.Add(取得_TextBoxColumn(dc2, 120))
DataGrid1.TableStyles.Add(ts)
End Sub
'サイズ自動バージョン
Private Function 取得_TextBoxColumn(ByVal p_dc As DataColumn) As DataGridTextBoxColumn
Return 取得_TextBoxColumn(p_dc, -1)
End Function
'サイズ設定バージョン
Private Function 取得_TextBoxColumn(ByVal p_dc As DataColumn, ByVal p_width As Integer) As DataGridTextBoxColumn
Dim l_ret As New DataGridTextBoxColumn()
With l_ret
.MappingName = p_dc.ColumnName
.HeaderText = p_dc.ColumnName
.Format = "yyyy/MM/dd hh:mm:ss"
.Width = p_width
End With
Return l_ret
End Function
もっとシンプルにさせようとすると、別クラスを起こし、データグリッドを継承したオリジナルのコントロールを作成する方法が思いつきます。
あくまでも私の場合ですが、、、
・まだ他にグリッドに機能を持たせる恐れがあるのであれば、継承クラスを作成する
・この画面のみで利用する機能であれば、継承クラスを作成するまでもなし
という判断を行います。
どの様な創りがベストかは、全体設計から判断をされたらよいと思います。
DataGridTextBoxColumn クラスを利用します
http://okwave.jp/kotaeru.php3?q=2062060http://dobon.net/vb/dotnet/datagrid/columnformat.htmlhttp://dobon.net/vb/dotnet/datagrid/columnwidth.html
Dim dt As New DataTable("aaa")
Dim dc As New DataColumn("日付", Type.GetType("System.DateTime"))
dt.Columns.Add(dc)
dt.Rows.Add(New Object() {"2006/05/10 14:00:00"})
DataGrid1.DataSource = dt
Dim cs As New DataGridTextBoxColumn()
cs.MappingName = dc.ColumnName
cs.HeaderText = dc.ColumnName
cs.Width = 120
cs.Format = "yyyy/MM/dd hh:mm:ss"
Dim ts As New DataGridTableStyle()
ts.MappingName = dt.TableName
ts.GridColumnStyles.Add(cs)
DataGrid1.TableStyles.Add(ts)
質問者
補足
できました。ありがとうございました。
この場合、もう一つ同じような列を増やしたいときは
-------------------------------------------------
Dim dt As New DataTable("aaa")
Dim dc1 As New DataColumn("日付1", Type.GetType("System.DateTime"))
dt.Columns.Add(dc1)
Dim dc2 As New DataColumn("日付2", Type.GetType("System.DateTime"))
dt.Columns.Add(dc2)
dt.Rows.Add(New Object() {"2006/05/10 14:00:00","2006/05/11 14:00:00"})
DataGrid1.DataSource = dt
Dim ts As New DataGridTableStyle()
ts.MappingName = dt.TableName
'「日付1」の設定
Dim cs As New DataGridTextBoxColumn()
cs.MappingName = dc1.ColumnName
cs.HeaderText = dc1.ColumnName
cs.Width = 120
cs.Format = "yyyy/MM/dd hh:mm:ss"
ts.GridColumnStyles.Add(cs)
DataGrid1.TableStyles.Add(ts)
'「日付2」の設定
cs = New DataGridTextBoxColumn()
cs.MappingName = dc2.ColumnName
cs.HeaderText = dc2.ColumnName
cs.Width = 120
cs.Format = "yyyy/MM/dd hh:mm:ss"
ts.GridColumnStyles.Add(cs)
DataGrid1.TableStyles.Add(ts)
------------------------------------------------
のようにすれば、列の追加が出来たのですが、他に方法ってないですか?
ソースが汚くてすみません。
お礼
分かりました。 >全体設計から判断をされたらよいと思います。 そうですね。全体設計からベストな方法を考えて見ます ご回答ありがとうございます。