Проходя короткую дату в TextBox WPF - PullRequest
0 голосов
/ 20 апреля 2020

Здравствуйте, у меня есть dataGrid, который при двойном щелчке открывает новый Window и заполняет некоторые TextBoxes Моя проблема - Textboxes показывает дату и время, когда я хотел бы, чтобы она показала короткую дату.

Я настроил для своей SQL базы данных сервера строго Date, и она показывает короткую дату в базе данных, поэтому я не уверен, почему она передает DateTime в моем Textbox.

Пожалуйста, помогите!

Вот мой код для окна 1:

        private void dtGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {

        // User double clicks on DataGrid Row
        // Open new Window
        // Populate selected textboxes with selected datarow
        DataGrid gd = (DataGrid)sender;
        DataRowView row_selected = gd.SelectedItem as DataRowView;

        var windowToOpen = new Window1();

        if (gd != null)
        {
            // Textboxes
            windowToOpen.txt_RowRecrd.Text = row_selected["DSP_ID"].ToString();
            windowToOpen.txt_DateResolved.Text = row_selected["DATERSLVD"].ToString();
            windowToOpen.txt_revcls.Text = row_selected["RateType"].ToString();

            windowToOpen.Show();
       }
    }

Вот XAML для одного из моих TextBoxes в окне 2:

                        <TextBox
                        x:Name="txt_DateResolved"
                        Width="110"
                        Height="26"
                        Margin="5,0,0,0"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Bottom"
                        Background="Transparent"
                        BorderBrush="Transparent"
                        BorderThickness="0"
                        Foreground="Black"
                        IsEnabled="True">
                    </TextBox>

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Попробуйте преобразовать object, возвращенное из DataRowView в DateTime, а затем используйте перегрузку ToString, которая принимает формат:

windowToOpen.txt_DateResolved.Text = Convert.ToDateTime(row_selected["DATERSLVD"])
    .ToString("yyyy-MM-dd");

Вы также можете проверить наличие и обрабатывать null значения:

windowToOpen.txt_DateResolved.Text = row_selected["DATERSLVD"] == DBNull.Value?
    string.Empty : Convert.ToDateTime(row_selected["DATERSLVD"]).ToString("yyyy-MM-dd");
0 голосов
/ 20 апреля 2020

Потому что в C# у вас нет Date struct, у вас есть только DateTime struct . В вашем случае вы можете отформатировать DateTime в методе ToString(). У вас должен быть экземпляр DateTime, и на нем вы можете вызвать следующий метод:

dateTime.ToShortDateString()

или

dateTime.ToString("dd-MM-yy")

Пример:

if (row_selected["DATERSLVD"] != null)
{   
  DateTime dateTime;
  if (DateTime.TryParse(row_selected["DATERSLVD"].ToString(), out dateTime))
  {
      windowToOpen.txt_DateResolved.Text = dateTime.ToShortDateString();
  }
  else
  {
      windowToOpen.txt_DateResolved.Text = ""; //assign default value
  }
}
...