Отображение DateTime в Xamarin.Forms с SQLite - PullRequest
1 голос
/ 14 февраля 2020

Я создаю приложение Xamarin.Forms для школьного проекта. Этот проект отображает список школьных терминов (6-месячные блоки времени) с датами начала и окончания. Список терминов отображается без проблем, но даты не отображаются так, как ожидалось: все даты - 01/01/0001. Таблица терминов:

    Id          TermName    StartDate   EndDate   
----------  ----------  ----------  ----------
1           Term 1      2020-01-01  2020-06-30
2           Term 2      2020-07-01  2020-12-31
3           Term 3      2021-01-01  2021-06-30
4           Term 4      2021-07-01  2021-12-31
5           Term 5      2022-01-01  2022-06-30
6           Term 6      2022-07-01  2022-12-31

Поскольку SQLite не имеет определенного типа данных c DATETIME, я сохраняю StartDate и EndDate как тип данных TEXT, но файл модели term.cs использует тип данных DateTime. Размещение точки останова при загрузке списка терминов показывает: Данные точки останова .

Файл Terms.cs:

[Table("Terms")]
    public class Terms
    {
        public int Term { get; set; }
        public string TermName { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
    }

Файл MainPage.xaml.cs:

protected override void OnAppearing()
        {
            base.OnAppearing();
            using (SQLiteConnection conn = new SQLiteConnection(App.DBLocation))
            {
                conn.CreateTable<Terms>();
                var terms = conn.Table<Terms>().ToList();
                TermsListView.ItemsSource = terms;
                TermsListView.SelectedItem = null;
            }
        }

Как мне получить StartDate и EndDate из моей таблицы, чтобы они правильно отображались в моем ListView?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Поскольку вы сохраняете его как string, значение не может быть присвоено свойствам DateTime (без автоматического преобразования c). Таким образом, они сохраняют дату по умолчанию. Измените свойства на:

 public class Terms
    {
        public int Term { get; set; }
        public string TermName { get; set; }
        public string StartDate { get; set; }
        public string EndDate { get; set; }
    }

Затем отобразите эти свойства или преобразуйте значение в реальный тип DateTime:

public class Terms
        {
            public int Term { get; set; }
            public string TermName { get; set; }
            public string StartDate { get; set; }
            public string EndDate { get; set; }
            public DateTime RealStartDate => DateTime.Parse(StartDate);
            public DateTime RealEndDate => DateTime.Parse(EndDate);
        }

Метод Parse не проверен мной, но Вы можете найти правильный синтаксис, если результат не тот, который вам нужен.

При просмотре вы должны использовать свойства RealStartDate и RealEndDate

0 голосов
/ 14 февраля 2020

Попробуйте этот код в ListView

     <Label
                                        FontSize="18"
                                        HorizontalOptions="Center"
                                        HorizontalTextAlignment="Center"
                                        Text="{Binding StartDate, StringFormat='{0:dd/MM/yyyy}'}" />
<Label
                                        FontSize="18"
                                        HorizontalOptions="Center"
                                        HorizontalTextAlignment="Center"
                                        Text="{Binding EndDate, StringFormat='{0:dd/MM/yyyy}'}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...