2009-10-05 50 views
2

我正在首次使用WPF中的程序。我有一個GridView模式下的ListView,顯示來自綁定數據集(從數據庫中抓取)的數據。以編程方式替換加載的GridView單元格內容

在我的數據庫中,「出生日期」不是必填字段。因此,沒有dob的記錄的值設置爲DateTime.MinValue。在每個最小值日期中,日期顯示在單元格中爲01/01/0001。我試圖找到一種方法來格式化單元格,以便DateTime.MinValue不顯示,或者用""替換每個MinValue

我的想法是要麼使用文本塊的「Loaded」事件日期是在並且替換「01/01/0001」的每個實例,或循環通過數據集之前發送到GridView和刪除/替換他們在那裏。我還沒有計算出如何去做。

爲GridView我的XAML代碼是:爲DataSet

<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; 
} 

上如何顯示在我的GridView DateTime.MinValue空白任何建議,將不勝感激!

回答

2

我會做一個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並返回一個空白字符串。

+0

完美,謝謝!我從這裏使用了Convert/Convert Back代碼:http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx - 唯一讓我心生懸念的就是搞清楚如何聲明我在xaml中的命名空間。 對於其他人,您需要使用xmlns:local =「clr-namespace:」您的命名空間 - 「 – 2009-10-05 20:42:04

+0

不客氣。價值轉換器對這類事情非常有用。您可以在轉換器類上定義公共屬性,然後添加具有不同配置的不同資源。例如,你可能有一個布爾值來控制DateTime.MinValue是否被清空,然後你可以用不同的方式重用同一個類。 – 2009-10-05 21:51:59

相關問題