如何将 Xamarin TimePicker 值保存到数据库?
How do I save Xamarin TimePicker value to database?
我正在使用 SQLite 存储来自 Xamarin.Forms 应用程序的数据。我希望用户能够将 DatePicker 用于日期,将 TimePicker 用于时间,然后将其存储。当我使用以下内容时:
<DatePicker Date="{Binding Date}"
x:Name="DatePicker"
Format="D" />
它正确地将所选日期存储在数据库中,但是当我使用时:
<TimePicker Time="{Binding Time}"
x:Name="TimePicker"
Format="T"/>
每次存储时间为12:00上午。我错过了什么?
日期和时间都是数据库中的日期时间值。
using System;
using SQLite;
namespace Items.Models
{
public class Item
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Location { get; set; }
public DateTime Date { get; set; } = DateTime.Now;
public DateTime Time { get; set; }
}
和
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
using Items.Models;
namespace Item.Data
{
public class ItemDatabase
{
readonly SQLiteAsyncConnection database;
public ItemDatabase(string dbPath)
{
database = new SQLiteAsyncConnection(dbPath);
database.CreateTableAsync<Item>().Wait();
}
public Task<List<Item>> GetItemsAsync()
{
//Get all items.
return database.Table<Item>().ToListAsync();
}
public Task<Item> GetItemAsync(int id)
{
// Get a specific item.
return database.Table<Item>()
.Where(i => i.ID == id)
.FirstOrDefaultAsync();
}
public Task<int> SaveItemAsync(Item item)
{
if (item.ID != 0)
{
// Update an existing item.
return database.UpdateAsync(item);
}
else
{
// Save a new item.
return database.InsertAsync(item);
}
}
public Task<int> DeleteItemAsync(Item item)
{
// Delete an Item.
return database.DeleteAsync(item);
}
}
}
你弄错了 TimePicker.Time
的类型,应该是 TimeSpan
而不是 DateTime
,所以绑定创建不正确,这就是为什么当select TimePicker 上的时间。
修改你的代码如下
public class Item
{
public DateTime Date { get; set; } = DateTime.Now;
public TimeSpan Time { get; set; }
}
我正在使用 SQLite 存储来自 Xamarin.Forms 应用程序的数据。我希望用户能够将 DatePicker 用于日期,将 TimePicker 用于时间,然后将其存储。当我使用以下内容时:
<DatePicker Date="{Binding Date}"
x:Name="DatePicker"
Format="D" />
它正确地将所选日期存储在数据库中,但是当我使用时:
<TimePicker Time="{Binding Time}"
x:Name="TimePicker"
Format="T"/>
每次存储时间为12:00上午。我错过了什么?
日期和时间都是数据库中的日期时间值。
using System;
using SQLite;
namespace Items.Models
{
public class Item
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Location { get; set; }
public DateTime Date { get; set; } = DateTime.Now;
public DateTime Time { get; set; }
}
和
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
using Items.Models;
namespace Item.Data
{
public class ItemDatabase
{
readonly SQLiteAsyncConnection database;
public ItemDatabase(string dbPath)
{
database = new SQLiteAsyncConnection(dbPath);
database.CreateTableAsync<Item>().Wait();
}
public Task<List<Item>> GetItemsAsync()
{
//Get all items.
return database.Table<Item>().ToListAsync();
}
public Task<Item> GetItemAsync(int id)
{
// Get a specific item.
return database.Table<Item>()
.Where(i => i.ID == id)
.FirstOrDefaultAsync();
}
public Task<int> SaveItemAsync(Item item)
{
if (item.ID != 0)
{
// Update an existing item.
return database.UpdateAsync(item);
}
else
{
// Save a new item.
return database.InsertAsync(item);
}
}
public Task<int> DeleteItemAsync(Item item)
{
// Delete an Item.
return database.DeleteAsync(item);
}
}
}
你弄错了 TimePicker.Time
的类型,应该是 TimeSpan
而不是 DateTime
,所以绑定创建不正确,这就是为什么当select TimePicker 上的时间。
修改你的代码如下
public class Item
{
public DateTime Date { get; set; } = DateTime.Now;
public TimeSpan Time { get; set; }
}