如何将 Xamarin TimePicker 值保存到数据库?

Posted

技术标签:

【中文标题】如何将 Xamarin TimePicker 值保存到数据库?【英文标题】:How do I save Xamarin TimePicker value to database? 【发布时间】:2021-07-11 19:52:20 【问题描述】:

我正在使用 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 AM。我错过了什么?

日期和时间都是数据库中的日期时间值。

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

【问题讨论】:

您没有显示任何用于存储或检索时间的实际代码 @Jason 现在我有了。谢谢! 【参考方案1】:

TimePicker.Time的类型弄错了,应该是TimeSpan而不是DateTime ,所以绑定创建错误,这就是TimePicker上选择时间时值没有变化的原因。

如下修改你的代码

public class Item
    

        public DateTime Date  get; set;  = DateTime.Now;
        public TimeSpan Time  get; set; 
    

【讨论】:

谢谢@ColeX-MSFT!做到了!当我在 SQLite 文档中查找数据类型时,没有 TimeSpan 的数据类型,但看起来 C# TimeSpan 存储正确:-)

以上是关于如何将 Xamarin TimePicker 值保存到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Timepicker IsVisible 属性与自定义渲染器

Xamarin.Forms Android DatePicker / TimePicker按钮侦听器

xamarin 表单中的 datepicker 和 timepicker 多次触发 Focus 和 Unfocus 事件

是否可以将 TimePicker 的“Focused”视图嵌入到另一个视图中?

如何在 xamarin 表单中更改视觉材料 DatePickerDialog 和 TimePickerDialog 背景颜色

Xamarin.Forms DatePicker 时间