프로그래밍 방식으로 하중시 GridView 셀 내용을 교체하십시오
-
19-09-2019 - |
문제
나는 처음으로 WPF에서 프로그램을 진행하고 있습니다. 바운드 데이터 세트 (데이터베이스에서 가져온)의 데이터를 표시하는 GridView 모드에 ListView가 있습니다.
내 데이터베이스에서 "생년월일"은 필수 필드가 아닙니다. 따라서 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;
}
공백을 보여주는 방법에 대한 조언 DateTime.MinValue
내 그리드 뷰에서 대단히 감사하겠습니다!
해결책
나는 만들 것이다 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
빈 끈을 반환하십시오.