سؤال

أنا أعمل في برنامج في 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 وإرجاع سلسلة فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top