Преобразовать строку в тип даты - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу преобразовать строку в тип даты в моем приложении wpf.Ниже приведен код.

Connection con1 = new Connection();
cmbStatementDate.Items.Clear();
con1.dataGet("SELECT distinct  statement_date from stockstatement ORDER BY statement_date asc");
DataTable dt1 = new DataTable();
con1.sda.Fill(dt1);
foreach (DataRow dr1 in dt1.Rows)
{
    cmbStatementDate.Items.Add(dr1["statement_date"].ToString());
}

Как преобразовать его результат в формат даты (ДД-ММ-ГГГГ) и сохранить его в cmbStatementDate (выпадающий список).

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вы имеете в виду, что это уже тип date \ datetime в таблице, и вы хотите видеть его в виде строки dd-MM-yyyy?Если так:

((DateTime)dr1["statement_date"]).ToString("dd-MM-yyyy");

сделает это.

0 голосов
/ 21 февраля 2019

Я предполагаю, что это поле datetime или date.Если поле имеет значение varchar, оно должно быть проанализировано в datetime или date в запросе SQL.

Нет необходимости преобразовывать даты в строки или даже добавлять элементы по одному.Вы можете использовать привязку данных для привязки непосредственно к DataTable.

Windows Forms

Поле со списком привязки данных описано в Как: привязать элемент управления ComboBox или ListBox к Windows Forms к данным

Вы также можете использовать свойство FormatString, чтобы указать, как элемент управления должен отображать даты, например: *

//Use local short date format
cmbStatementDate.FormatString = "d";
//or hard-coded short format
//  cmbStatementDate.FormatString = "MM-dd-YYYY";
cmbStatementDate.DisplayMember = "statement_date";
cmbStatementDate.DataSource=dt;

best место для указания FormatString и DisplayMemberхотя сам дизайнер форм, а не файл с выделенным кодом.Это значительно упрощает локализацию и отображение форматов.

Привязка данных означает, что нет необходимости перерисовывать комбинированный список при каждом добавлении нового элемента.Вся комбинация перерисовывается только после загрузки всех данных.

Также можно извлечь свойства элемента управления из файлов настроек или ресурсов.Это позволило бы кому-то локализовать приложение, просто создав новый файл настроек или ресурсов.

В целом локализация, глобализация и привязка данных запекаются в .NET с 2002 года. Вы можете создаватьприложение только один раз и легко локализует его для различных областей без ручного форматирования строк.

Общие сведения о привязке данных можно прочитать в следующих разделах:

Битпредупреждение

Не используйте порядок привязки данных, указанный в документации:

cmbStatementDate.DataSource=dt;
cmbStatementDate.DisplayMember = "statement_date";

Это перекрасит элемент управления дважды если возможно, используя оригинальное значение DisplayMember.

WPF

Связывание данных и строки форматирования также работают в WPF и, вероятно, еще проще в использовании.Без использования привязки данных можно создать отформатированный комбинированный список с:

<ComboBox x:Name="cmbStatementDate" 
          DisplayMemberPath="statement_date" ItemStringFormat="d" />

или

<ComboBox x:Name="cmbStatementDate" 
          DisplayMemberPath="statement_date" ItemStringFormat="dd-MM-yyyy" />

и загрузить данные с помощью:

cmbStatementDate.ItemsSource=dt1;

Этот код выглядиткак привязка данных и все же не .

При связывании данных комбо может связываться со свойствами в codebehind или классе ViewModel, например:

<ComboBox x:Name="cmbStatementDate" 
          DisplayMemberPath="statement_date" 
          ItemStringFormat="dd-MM-yyyy" 
          ItemsSource="{Binding Path=MyDateData}"
          SelectedValue="{Binding Path=SelectedDate}" />

В этом случае MyDateData и SelectedDate см. свойства в codebehind или ViewModel.

Привязка данных в WPF описана в Обзор привязки данных

0 голосов
/ 21 февраля 2019

Вы можете редактировать свой код, как это

Connection con1 = new Connection();
cmbStatementDate.Items.Clear();
con1.dataGet("SELECT distinct  statement_date from stockstatement ORDER BY statement_date asc");
DataTable dt1 = new DataTable();
con1.sda.Fill(dt1);
foreach (DataRow dr1 in dt1.Rows)
{
     cmbStatementDate.Items.Add(Convert.ToDateTime(dr1["statement_date"]).ToString("DD-MM-YYYY"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...