استبدال برمجيا محتويات خلية GridView عند الحمل
-
19-09-2019 - |
سؤال
أنا أعمل في برنامج في WPF لأول مرة. لدي ListView في وضع GridView عرض البيانات من مجموعة بيانات ملزمة (والتي يتم صيدها من قاعدة بيانات).
في قاعدة البيانات الخاصة بي، "تاريخ الميلاد" ليس حقل مطلوب. على هذا النحو، كان أي سجل بدون DOB يحتوي على القيمة DateTime.MinValue
. وبعد في كل من هذه التواريخ القيمة الدنيا، يظهر التاريخ في الخلية كما 01/01/0001. أحاول إيجاد طريقة إما تنسيق الخلية DateTime.MinValue
لا تظهر، أو استبدال كل منها MinValue
مع ""
.
كان فكرتي إما استخدام الحدث "محمل" للنصية TextBlock في التاريخ ويستبدل كل مثيل "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>
رمز DataSet:
private void FillListView(DataSet ds)
{
if (resultsListView.Items.Count != 0)
{
resultsListView.Items.Clear();
}
resultsListView.DataContext = ds.Tables[0].DefaultView;
}
أي نصيحة حول كيفية إظهار الفراغات ل DateTime.MinValue
في بلدي gridview سيكون موضع تقدير كبير!
المحلول
أود أن أجعل 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
وإرجاع سلسلة فارغة.