現在のDataGridView1の状態です(コード) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '行の追加を無効 DataGridView1.AllowUserToAddRows = False '列のリサイズを設定 DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'フォントサイズを設定 DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 12) '列1×行5を追加 DataGridView1.ColumnCount = 1 DataGridView1.RowCount = 5 '書式を設定 DataGridView1.Columns(0).DefaultCellStyle.Format = "HH:mm:ss" '列のヘッダーに文字を設定 DataGridView1.Columns(0).HeaderText = "日時" 'セルに値を設定 Dim dt As DateTime = New Date(2015, 9, 3, 9, 0, 0) Dim i As Integer For i = 0 To DataGridView1.Rows.Count - 1 'セルに文字を設定 DataGridView1(0, i).Value = dt.AddHours(i) Next i End Sub
■No33154に返信(ねここねこさんの記事)
> ありがとうございます。> そのサンプルでは出来ませんでした。
CellBeginEditイベントとCellEndEditイベントで該当セルの場合はFormatを変更するようにすればどうでしょう?
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) _
Handles DataGridView1.CellBeginEdit
DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "yyyy/MM/dd HH:mm:ss"
End Sub
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "HH:mm:ss"
End Sub
編集に入ると消えてしまうとのことですが、
編集から抜けても消えたままなのでしょうか?
また、その時のValueはどのような状態なのでしょうか?
.NET Framework4.6ではなく.NET Framework4.5で試しました。
前回の私の提示したコードだけですと、初回編集時は期待通りの表示になりましたが
一度編集すると、編集した文字列そのものが表示され、Formatに沿った表示になりませんでした。
この時、編集前のValueの型がDateTimeなのに対し、編集後がStringになりました。
そこでLoadイベントのDataGridViewの初期化時に
'列の型を指定
DataGridView1.Columns(0).ValueType = GetType(DateTime)
と型を指定したところ、期待通りの動作になりました。
実際に動作させたコードは以下の通りです。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'行の追加を無効
DataGridView1.AllowUserToAddRows = False
'列のリサイズを設定
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
'フォントサイズを設定
DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 12)
'列1×行5を追加
DataGridView1.ColumnCount = 1
DataGridView1.RowCount = 5
'列の型を指定
DataGridView1.Columns(0).ValueType = GetType(DateTime)
'書式を設定
DataGridView1.Columns(0).DefaultCellStyle.Format = "HH:mm:ss"
'列のヘッダーに文字を設定
DataGridView1.Columns(0).HeaderText = "日時"
'セルに値を設定
Dim dt As DateTime = New Date(2015, 9, 3, 9, 0, 0)
Dim i As Integer
For i = 0 To DataGridView1.Rows.Count - 1
'セルに文字を設定
DataGridView1(0, i).Value = dt.AddHours(i)
Next i
End Sub
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) _
Handles DataGridView1.CellBeginEdit
If e.ColumnIndex = 0 Then
DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "yyyy/MM/dd HH:mm:ss"
End If
End Sub
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
If e.ColumnIndex = 0 Then
DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "HH:mm:ss"
End If
End Sub