Подумав и поэкспериментировав, я понял, как сделать это в графическом интерфейсе вместо загрузки данных.
Вы можете добиться этого конкретного форматирования, обрабатывая событие CellFormatting
для DataGridView
.
Данные испытаний, которые я использовал:
Private Property MyData As DataTable
Private Sub InitialiseData()
MyData = New DataTable
MyData.Columns.Add("YMDString", GetType(String))
Dim dr As DataRow
dr = MyData.NewRow()
dr(0) = "000901"
MyData.Rows.Add(dr)
dr = MyData.NewRow()
dr(0) = "010901"
MyData.Rows.Add(dr)
dr = MyData.NewRow()
dr(0) = "020901"
MyData.Rows.Add(dr)
End Sub
Конфигурация DataGridView
Private Sub SetupDataGridView()
InitialiseData()
DataGridView1.AutoGenerateColumns = False
DataGridView1.Columns.Add("YMDString", "YMD String")
DataGridView1.Columns.Add("YMDDateTime", "YMD DateTime")
DataGridView1.Columns(0).DataPropertyName = "YMDString"
DataGridView1.Columns(1).DataPropertyName = "YMDString"
DataGridView1.DataSource = MyData
AddHandler DataGridView1.CellFormatting, AddressOf DataGridView1OnCellFormatting
End Sub
И обработчик событий CellFormatting
, который выполняет тяжелую работу. Разбор DateTime
- не лучшее, что вы можете использовать, но он иллюстрирует принцип того, чего вы хотите достичь.
Private Sub DataGridView1OnCellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs)
Dim thisGrid As DataGridView = CType(sender, DataGridView)
If (thisGrid IsNot Nothing AndAlso e.Value IsNot Nothing) Then
If (thisGrid.Columns(e.ColumnIndex).Name = "YMDDateTime") Then
Dim stringValue As String = e.Value.ToString()
Dim year As Integer = 2000 + stringValue.Substring(0, 2)
Dim month As Integer = stringValue.Substring(2, 2)
Dim day As Integer = stringValue.Substring(4, 2)
Dim dt As New DateTime(year, month, day)
e.Value = dt.ToString("yyyy/MM/dd")
End If
End If
End Sub
При запуске я получаю такой результат: