Я только что протестировал следующий код, и он работал, как и ожидалось:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim table As New DataTable
With table.Columns
.Add("Date", GetType(Date))
.Add("Time", GetType(TimeSpan))
End With
With table.Rows
.Add(#1/1/2000#, TimeSpan.FromHours(5.0))
.Add(#2/4/2008#, TimeSpan.FromHours(10.25))
.Add(#3/8/2016#, TimeSpan.FromHours(15.5))
.Add(#4/12/2024#, TimeSpan.FromHours(20.75))
End With
BindingSource1.DataSource = table
UnformattedDateTextBox.DataBindings.Add("Text", BindingSource1, "Date")
UnformattedTimeTextBox.DataBindings.Add("Text", BindingSource1, "Time")
FormattedDateTextBox.DataBindings.Add("Text", BindingSource1, "Date", True, DataSourceUpdateMode.OnValidation, Nothing, "dd MMM yyyy")
FormattedTimeTextBox.DataBindings.Add("Text", BindingSource1, "Time", True, DataSourceUpdateMode.OnValidation, Nothing, "hh\:mm")
End Sub
Я использовал четыре TextBoxes
- два без форматирования и два с. Как видите, я предоставил только основную информацию при привязке неформатированного TextBoxes
, но использовал перегрузку Add
с дополнительными параметрами, чтобы указать, что форматирование было включено, и какой формат должен быть при привязке форматированного TextBoxes
. Чтобы указать строку формата, вы также должны указать режим обновления источника данных и нулевое значение. В этом случае я указал значения по умолчанию для каждого. Если вы не хотите указывать эти значения, вы можете вернуться к более простой перегрузке, а затем установить другие необходимые свойства после создания:
With FormattedDateTextBox.DataBindings.Add("Text", BindingSource1, "Date")
.FormattingEnabled = True
.FormatString = "dd MMM yyyy"
End With
With FormattedTimeTextBox.DataBindings.Add("Text", BindingSource1, "Time")
.FormattingEnabled = True
.FormatString = "hh\:mm"
End With
Обратите внимание, что если ваши данные о времени также имеют тип Date
, принцип остается тем же. Вы просто используете другую строку формата:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim table As New DataTable
With table.Columns
.Add("DateTime", GetType(Date))
End With
With table.Rows
.Add(#1/1/2000 5:00:00#)
.Add(#2/4/2008 10:15:00#)
.Add(#3/8/2016 15:30:00#)
.Add(#4/12/2024 20:45:00#)
End With
BindingSource1.DataSource = table
UnformattedDateTextBox.DataBindings.Add("Text", BindingSource1, "DateTime")
UnformattedTimeTextBox.DataBindings.Add("Text", BindingSource1, "DateTime")
With FormattedDateTextBox.DataBindings.Add("Text", BindingSource1, "DateTime")
.FormattingEnabled = True
.FormatString = "dd MMM yyyy"
End With
With FormattedTimeTextBox.DataBindings.Add("Text", BindingSource1, "DateTime")
.FormattingEnabled = True
.FormatString = "HH:mm"
End With
End Sub
person
jmcilhinney
schedule
05.01.2020
Date
, вы можете просто установить для свойстваFormattingEnabled
значениеTrue
, а затем соответствующим образом установить свойствоFormatString
. Если данные времени имеют типTimeSpan
, то возможно то же самое, хотя я не уверен на 100%. - person jmcilhinney   schedule 05.01.2020