【问题标题】:How do I save Xamarin TimePicker value to database?如何将 Xamarin TimePicker 值保存到数据库?
【发布时间】: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 现在我有了。谢谢!

标签: sqlite xamarin.forms datepicker timepicker


【解决方案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 存储正确:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多