Отображать пустое поле в ListView, когда Datetime в Datatable равно 01/01/1900

у меня есть DataTable dtLeaves с 5 столбцами, 2 из которых являются столбцами DateTime StartDate, EndDate, которые могут иметь значение minDate 01/01/1900 и DataTable, отображаемый через ListView LeavesListView, есть ли возможность ListView отображать даты 01/01/1900 как пустое поле вместо фактического значения? DataTable заполняется с SQL Server.

XAML

<ListView x:Name = "LeavesListView" Margin = "10,10,13,10" Background = "White" Opacity = "0.8" Grid.Row = "2" FontFamily = "Times New Roman" FontSize = "14" FlowDirection = "RightToLeft" SelectionChanged = "LeavesListView_SelectionChanged" MouseDoubleClick = "LeavesListView_MouseDoubleClick">
    <ListView.View>
        <GridView>
            <GridViewColumn Header = "تاريخ البدء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding StartDate, StringFormat=yyyy/MM/dd}" FrameworkElement.FlowDirection = "RightToLeft"/>
            <GridViewColumn Header = "تاريخ الأنتهاء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding EndDate, StringFormat=yyyy/MM/dd}" FrameworkElement.FlowDirection = "RightToLeft" />
            <GridViewColumn Header = "نوع الاجازة" Width = "100" FrameworkElement.FlowDirection = "RightToLeft">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text = "{Binding LeaveType}"  Foreground = "Red" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

Код для загрузки данных в ListView

public MainWindow()
{
    InitializeComponent();
    Variables.DtLeaves = DataLoad.LoadData("EmpLeaves", "");
}
private void LoadLeaveData()
{
    try
    {
        if (EmployeesListView.SelectedIndex < 0) return;
        Variables.DtLeaves.DefaultView.RowFilter = string.Format("EmpID = '{0}'",
        Variables.Dt.Rows[EmployeesListView.SelectedIndex][0]);
        Variables.DtLeaves.DefaultView.Sort = " StartDate ASC";
        LeavesListView.ItemsSource = Variables.DtLeaves.DefaultView;
        LeaveData.DataContext = LeavesListView.SelectedItem;
        LeavesListView.SelectedIndex = 0;
        LeavesListView.Items.Refresh();
    }
    catch (Exception ex)
    {
        MessageBox.Show(string.Format("Error({0}): {1} ", ex.Message, ex.HResult), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

и код в DataLoad.Cs

public static DataTable LoadData(string tableName, string filterString)
{
    using (var con = new SqlConnection(Variables.ConString))
    {
        var table = new DataTable("");
        con.StatisticsEnabled = true;
        if (filterString != "")
            filterString = string.Format(" WHERE {0}", filterString);
        Variables.CmdString = string.Format("SELECT * FROM {0} {1}", tableName, filterString);
        var cmd = new SqlCommand(Variables.CmdString, con);
        var sda = new SqlDataAdapter(cmd);
        sda.Fill(table);
        Variables.CurrentStatistics = con.RetrieveStatistics();
        return table;
    }
}

Не могли бы вы опубликовать свой код?

Zer0 15.03.2019 14:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
151
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать конвертер:

public class DateConverter : IValueConverter
{
    private static readonly DateTime s_defaultDate = new DateTime(1900, 01, 01);
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        return date == s_defaultDate ? string.Empty : date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML:

<ListView x:Name = "LeavesListView" Margin = "10,10,13,10" Background = "White" Opacity = "0.8" Grid.Row = "2" FontFamily = "Times New Roman" FontSize = "14" FlowDirection = "RightToLeft" SelectionChanged = "LeavesListView_SelectionChanged" MouseDoubleClick = "LeavesListView_MouseDoubleClick">
    <ListView.Resources>
        <local:DateConverter x:Key = "DateConverter" />
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header = "تاريخ البدء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding StartDate, Converter = {StaticResource DateConverter}}" FrameworkElement.FlowDirection = "RightToLeft"/>
            <GridViewColumn Header = "تاريخ الأنتهاء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding EndDate, Converter = {StaticResource DateConverter}}" FrameworkElement.FlowDirection = "RightToLeft" />
            <GridViewColumn Header = "نوع الاجازة" Width = "100" FrameworkElement.FlowDirection = "RightToLeft">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text = "{Binding LeaveType}"  Foreground = "Red" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

Работает отлично. ты.

Eng.RedWolf 15.03.2019 16:19

Всего одно редактирование в строке <GridViewColumn Header = "تاريخ البدء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding EndDate, Converter = {StaticResource DateConverter}}" FrameworkElement.FlowDirection = "RightToLeft"/> оно должно быть <GridViewColumn Header = "تاريخ البدء" Width = "120" TextBlock.TextAlignment = "Center" DisplayMemberBinding = "{Binding StartDate, Converter = {StaticResource DateConverter}}" FrameworkElement.FlowDirection = "RightToLeft"/> я скучаю по нему в моем вопросе

Eng.RedWolf 15.03.2019 16:22

@Eng.RedWolf: исправлено.

mm8 15.03.2019 16:23

Другие вопросы по теме