使用 SQLite 在 Xamarin.Forms 中显示日期时间
Displaying DateTime in Xamarin.Forms with SQLite
我正在为学校项目创建 Xamarin.Forms 应用程序。该项目显示了一个包含开始和结束日期的学期列表(6 个月的时间块)。条款列表显示没有问题,但日期未按预期显示:所有日期均为 01/01/0001。术语 table 是:
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 没有特定的 DATETIME 数据类型,我将 StartDate 和 EndDate 存储为 TEXT 数据类型,但 terms.cs 模型文件使用 DateTime 数据类型。在加载术语列表时放置一个断点显示:
Breakpoint data.
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;
}
}
如何从我的 table 中获取 StartDate 和 EndDate 以正确显示在我的 ListView 中?
在 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}'}" />
因为您将其存储为 string
,因此无法将值分配给 DateTime
属性(无自动转换)。所以他们保留默认日期。
将属性更改为:
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
属性
我正在为学校项目创建 Xamarin.Forms 应用程序。该项目显示了一个包含开始和结束日期的学期列表(6 个月的时间块)。条款列表显示没有问题,但日期未按预期显示:所有日期均为 01/01/0001。术语 table 是:
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 没有特定的 DATETIME 数据类型,我将 StartDate 和 EndDate 存储为 TEXT 数据类型,但 terms.cs 模型文件使用 DateTime 数据类型。在加载术语列表时放置一个断点显示: Breakpoint data.
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;
}
}
如何从我的 table 中获取 StartDate 和 EndDate 以正确显示在我的 ListView 中?
在 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}'}" />
因为您将其存储为 string
,因此无法将值分配给 DateTime
属性(无自动转换)。所以他们保留默认日期。
将属性更改为:
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
属性