性格悪い人が優勝

Gridに「2006/05/10 13:00:00」と表示させたいのですが、「2006/05/10」と表示されてしまいます。

------------------------------------------------

Dim dt As DataTable
Dim dtSet As New DataSet

dt = dtSet.Tables.Add("aaa")

dt.Columns.Add("日付", Type.GetType("System.DateTime"))

dt.Rows.Add(New Object() {"2006/05/10 14:00:00"})

DataGrid1.DataSource = dt

------------------------------------------------

ソースが間違っているのでしょうか。どなたかアドバイスをお願いします。

A 回答 (2件)

>他に方法ってないですか?


おそらく無いかと思います。

極力シンプルにしたいのであれば、関数化してあげると、メイン部のコードが多少ダイエットできると思います。

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


もっとシンプルにさせようとすると、別クラスを起こし、データグリッドを継承したオリジナルのコントロールを作成する方法が思いつきます。

あくまでも私の場合ですが、、、
・まだ他にグリッドに機能を持たせる恐れがあるのであれば、継承クラスを作成する
・この画面のみで利用する機能であれば、継承クラスを作成するまでもなし
という判断を行います。

どの様な創りがベストかは、全体設計から判断をされたらよいと思います。
    • good
    • 0
この回答へのお礼

分かりました。

>全体設計から判断をされたらよいと思います。
そうですね。全体設計からベストな方法を考えて見ます

ご回答ありがとうございます。

お礼日時:2006/05/12 17:01

DataGridTextBoxColumn クラスを利用します



http://okwave.jp/kotaeru.php3?q=2062060
http://dobon.net/vb/dotnet/datagrid/columnformat …
http://dobon.net/vb/dotnet/datagrid/columnwidth. …


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)

------------------------------------------------

のようにすれば、列の追加が出来たのですが、他に方法ってないですか?

ソースが汚くてすみません。

補足日時:2006/05/11 11:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!