Я использую источник привязки для отображения данных в текстовом поле из базы данных, могу ли я узнать, как отформатировать дату и время, отображаемые в текстовом поле?

Я использую источник привязки, устанавливая свойства привязки данных каждого текстового поля для отображения данных в текстовом поле из базы данных, Me.PaymentTableAdapter.Fill(Me.RestaurantDataSet.Payment)

Могу ли я узнать, как отформатировать дату и время, например 04 Jan 2020 и 23:00, отображаемые в текстовом поле? Стиль отображения по умолчанию — 2020/01/04 и 23:00:00.

Я искал через Google, но ни одно из решений не работает


person Sozai Kok    schedule 04.01.2020    source источник
comment
docs.microsoft.com/en-us/dotnet/framework/winforms/   -  person Mary    schedule 04.01.2020
comment
Добавьте обработчики в Format и Parse события TextBox Привязка   -  person Jimi    schedule 04.01.2020
comment
@Джими, нет необходимости обрабатывать события, если вам не нужно что-то необычное. Если данные имеют тип Date, вы можете просто установить для свойства FormattingEnabled значение True, а затем соответствующим образом установить свойство FormatString. Если данные времени имеют тип TimeSpan, то возможно то же самое, хотя я не уверен на 100%.   -  person jmcilhinney    schedule 05.01.2020
comment
@jmcilhinney Конечно, если вам не нужно обрабатывать настройки CultureInfo / языковые форматы / проверки ввода / вывода данных (или преобразования в виде временных меток Unix, расширенный формат System.Management DateTime и т. Д.), Жестко закодированный формат достаточно хорош. Форматирование может применяться к столбцам данных, представляющим DateTime, TimeSpan, DateTimeOffset и т. д.   -  person Jimi    schedule 05.01.2020


Ответы (1)


Я только что протестировал следующий код, и он работал, как и ожидалось:

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