كيف يمكنني الحصول على التاريخ فقط خارج منتقي البيانات في WPF؟


لدي DatePicker ليتمكن المستخدم من تحديد تاريخ يدويًا، ويتم إدخال هذا التاريخ كقيمة لعنصر محدد في شبكة البيانات الخاصة بي.

ومع ذلك، يتم عرضه كـ “23/01/2023 12:00:00 ص”، على سبيل المثال.
أريد أن يتم عرضه كـ “23/01/2023”.

لدي الكود الخاص بي كما يلي:

    public partial class Shortlist : Window
    {
     
//        public ObservableCollection<ShortlistedClient> shlclients { get; set; } = new ObservableCollection<ShortlistedClient>();
        List<ShortlistedClient1> shlclients = new List<ShortlistedClient1>();

        public DateTime? SelectedDateFormat { get; private set; }

        public Shortlist()
        {
            InitializeComponent();
        //    createShClientList();
            DataContext = shlclients;
            shlclients.Add(new ShortlistedClient1("Rich", "07515118265", "rich@gmail.com", "Glasgow", "Office", "MSc", "more than 3 years", "Yes", "No"));
            shlclients.Add(new ShortlistedClient1("Steve", "07515118265", "steve@gmail.com", "Glasgow", "Construction", "High School", "more than 3 years", "Yes", "No"));
            shlclients.Add(new ShortlistedClient1("Maria", "07485999005", "mb@gmail.com", "Edinburgh", "Office", "MSc", "more than 3 years", "No", "No"));
        }

        

        // method to add date to each selected client
        private void addInterviewDT(object sender, RoutedEventArgs e)
        {
            ShortlistedClient sc = dgr.SelectedItem as ShortlistedClient;

            if (sc != null )
            {
                sc.DT = DatePick.SelectedDate;
            }

ثم تعريف الفصل الخاص بي هو مثل هذا:

public class ShortlistedClient1 : Client, INotifyPropertyChanged
{
    private DateTime? _dt;

    public DateTime?  DT
    {
        get { return _dt; }
        set { _dt = value; NotifyPropertyChanged(); }
    }

    public bool InterestedinVac { get; private set; }


    public List<ShortlistedClient> clients { get; set; } = new List<ShortlistedClient1>();
    public ShortlistedClient(string n, string p, string e, string l, string wt, string q, string we, string dl, string cc) : base(n, p, e, l, wt, q, we, dl, cc)
    {
        DT = new DateTime();
        InterestedinVac = true;
    }

ما حاولت:

I have tried changing DateOnly? to DateTime? in my ShortlistedClient class, and then set { _dt = value.ToShortDateString(); .. }   but it gives an error as well.

and I have tried
```
private DateTime _dt;

        public DateTime  DT
        {
            get { return _dt; }
            set { _dt = value.Date; NotifyPropertyChanged(); }
        }

        public bool InterestedinVac { get; private set; }

        public List<ShortlistedClient> clients { get; set; } = new List<ShortlistedClient>();
        public ShortlistedClient(string n, string p, string e, string l, string wt, string q, string we, string dl, string cc) : base(n, p, e, l, wt, q, we, dl, cc)
        {
            DT = new DateTime(); 
            InterestedinVac = true; 
        }

```
which gives:
```
Error	CS0266	Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)	

الحل 1

يمكنك ضبط تنسيق التاريخ في ربط البيانات. على سبيل المثال:

XML
<DataGridTextColumn Binding="{StartDate, StringFormat=\{0:dd.MM.yy\}}" />

محدث

في بعض الأحيان، في هذه المواقف، يكون من المفيد إنشاء مشروع نموذجي لاختبار ميزات محددة قبل تنفيذها في مشروعك الرئيسي. لقد قمت بذلك هنا من أجلك في مشروع تجريبي سريع يوضح كيفية عمله:

1. نموذج البيانات

ج #
public class Widget
{
    public string? Name { get; set; }
    public DateTime? Date { get; set; }
}

2. الكود خلف

ج #
public partial class MainWindow : Window
{
    private Random random = new();
    public ObservableCollection<Widget> Widgets { get; set; } = new();

    public MainWindow()
    {
        CreateWidgets();
        InitializeComponent();
    }

    private void CreateWidgets()
    {
        for (int i = 0; i < 10; i++)
        {
            Widgets.Add(new()
            {
                Name = $"Widget {i}", 
                Date = DateTime.Now.AddDays(random.NextDouble() * 5)
            });
        }
    }
}

3. النافذة:

XML
<Window x:Class="WpfDataGridDateColumnFormatting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Name="Window"
        Title="MainWindow" Height="450" Width="800">

    <DataGrid DataContext="{Binding ElementName=Window}"
              ItemsSource="{Binding Widgets}"
              AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name"
                                Binding="{Binding Name}" />
            <DataGridTextColumn Header="Date"
                                Binding="{Binding Date,
                                          StringFormat=\{0:dd.MM.yy\}}" />
        </DataGrid.Columns>
    </DataGrid>
</Window>

يعمل الإخراج كما هو موضح أعلاه.

الحل 3

متأخر بعض الشيء، ولكن قد تكون المشكلة هي الفاصلة المفقودة بعد “DT” في:

<datagridtextcolumn header="Interview Date" Binding="{Binding DT StringFormat=\{0:dd.MM.yy\}}" />

コメント

タイトルとURLをコピーしました