2009-10-05 4 views
2

WPF의 프로그램을 처음으로 작업하고 있습니다. GridView 모드에서 데이터베이스에서 가져온 바인딩 된 데이터 집합의 데이터를 표시하는 ListView가 있습니다.프로그래밍 방식으로로드시 GridView 셀 내용 바꾸기

내 데이터베이스에서 "생년월일"은 필수 필드가 아닙니다. 따라서 dob가없는 레코드의 값은 DateTime.MinValue으로 설정되었습니다. 이 최소값 날짜 각각에 날짜가 01/01/0001로 셀에 표시됩니다. DateTime.MinValue이 표시되지 않거나 각 MinValue""으로 바꿀 수 있도록 셀을 포맷하는 방법을 찾으려고합니다.

내 생각은 날짜가있는 텍스트 블록의 "로드 됨"이벤트를 사용하고 "01/01/0001"의 각 인스턴스를 바꾸거나 GridView로 보내기 전에 데이터 집합을 반복하여 제거/바꾸기 그들. 나도 행운을 찾지 못했다. 의 GridView에 대한

내 XAML 코드는 다음과 같습니다 데이터 집합에 대한

<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 Code를 여기에서 사용했다 : http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx - 나를 매달 았던 유일한 방법은 선언하는 방법을 알아내는 것이었다. 내 네임 스페이스는 xaml입니다. 다른 사용자는 xmlns : local = "clr-namespace : -your namespace-" –

+0

을 사용해야합니다. 값 변환기는 이런 종류의 일에 정말로 유용합니다. 변환기 클래스에서 공용 속성을 정의한 다음 다른 구성으로 다른 리소스를 추가 할 수 있습니다. 예를 들어, DateTime.MinValue가 공백으로 표시되는지 여부를 제어하는 ​​부울을 가질 수 있습니다. 그런 다음 동일한 클래스를 다른 방식으로 다시 사용할 수 있습니다. –

관련 문제