Làm cách nào để tôi chỉ nhận được ngày ngoài công cụ hẹn hò trong WPF?

lập trình

[ad_1]

Tôi có DatePicker để người dùng chọn ngày theo cách thủ công và ngày này sẽ trở thành giá trị cho một mục đã chọn trong lưới dữ liệu của tôi.

tuy nhiên, nó được hiển thị là ’23/01/2023 12:00:00 AM’ chẳng hạn.
Tôi muốn nó được hiển thị là ’23/01/2023′.

Tôi có mã của tôi như sau:

    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;
            }

thì định nghĩa lớp của tôi là như thế này:

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;
    }

Những gì tôi đã thử:

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?)	

Giải pháp 1

Bạn có thể đặt định dạng ngày trong Liên kết dữ liệu. Ví dụ:

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

ĐÃ CẬP NHẬT

Đôi khi trong những tình huống này, việc tạo một dự án nguyên mẫu để thử nghiệm các tính năng cụ thể trước khi triển khai chúng trong dự án chính của bạn sẽ rất hữu ích. Tôi đã làm điều này cho bạn ở đây trong một dự án demo nhanh cho thấy cách thức hoạt động của nó:

1. Mô hình dữ liệu

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

2. Mã đằng sau

C#
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. Cửa sổ:

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>

Đầu ra hoạt động như mô tả ở trên.

Giải pháp 3

Hơi muộn một chút nhưng vấn đề có thể là thiếu dấu phẩy sau ‘DT’ trong:

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

[ad_2]

コメント

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