Программно заменить содержимое ячейки GridView при загрузке - PullRequest
2 голосов
/ 06 октября 2009

Я работаю над программой в WPF впервые. У меня есть ListView в режиме GridView, отображающий данные из связанного набора данных (который извлекается из базы данных).

В моей базе данных "дата рождения" не является обязательным полем. Таким образом, для любой записи без dob было установлено значение DateTime.MinValue. В каждую из этих дат минимальной стоимости дата отображается в ячейке как 01.010001. Я пытаюсь найти способ отформатировать ячейку так, чтобы DateTime.MinValue не показывался, или заменить каждый MinValue на "".

Я думал о том, чтобы либо использовать событие «Loaded» текстового блока, в котором находится дата, и заменить каждый экземпляр «01/01/0001», либо перебрать набор данных перед отправкой его в GridView и удалить / заменить их. там. Мне не повезло понять, как это сделать.

Мой код xaml для GridView:

<Grid>
    <ListView x:Name="resultsListView" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" Margin="0,54,0,28" ItemsSource="{Binding Path=Table}">
    <ListView.View>
    <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}"
            Header="Last Name" 
            Width="150"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" 
            Header="First Name"
            Width="100"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=MiddleName}" 
            Header="Middle Name"
            Width="100"/>
        <GridViewColumn Header="Date of Birth" Width="100">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock TextAlignment="Justify" Text="{Binding Path=DateOfBirth, StringFormat='{}{0:MM/dd/yyyy}'}" Loaded="TextBlock_Loaded" />
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
    </ListView.View>
    </ListView>
</Grid>

Код для набора данных:

private void FillListView(DataSet ds)
{
    if (resultsListView.Items.Count != 0)
    {
        resultsListView.Items.Clear();
    }
    resultsListView.DataContext = ds.Tables[0].DefaultView;
}

Любой совет о том, как показывать пробелы для DateTime.MinValue в моем GridView, будет очень полезен!

1 Ответ

2 голосов
/ 06 октября 2009

Я бы сделал IValueConverter, который имеет дело с этим, и включил бы его в ваше обязательное выражение.

В ваших ресурсах:

<local:DateTimeConverter x:Key="DateTimeConverter" />

Затем обновите привязку:

<TextBlock Text="{Binding Path=DateOfBirth, 
                          Converter={StaticResource DateTimeConverter},
                          ConverterParameter='MM/dd/yyyy'}" />

Тогда определите класс:

public class DateTimeConverter : IValueConverter

У этого есть два метода. Вам нужно только реализовать Convert (если только вы не планируете использовать двустороннюю привязку). В этом методе вы можете взять строку формата через параметр (как я уже передал в выражении привязки выше), а также проверить наличие DateTime.MinValue и вернуть пустую строку.

...