Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行

Posted

技术标签:

【中文标题】Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行【英文标题】:Xamarin/SQLite/C# - How to delete a row from listview and SQLite table with menu item delete 【发布时间】:2021-11-30 05:13:00 【问题描述】:

问题:所以这在编码论坛上并不少见,但似乎人们应用删除按钮的方式有很多种,经过几天的尝试,我正在寻求一些关于我的方法。

我有一个简单的应用程序,它接受一些用户输入并使用它来计算假期天数。我设置了一个简单的 SQLite 数据库来处理新条目:

public class LeaveEntry

    [PrimaryKey, AutoIncrement]
    public int ID  get; set; 
    public string Date  get; set; 
    public string Hours  get; set; 
    public string Days  get; set; 

然后我在这个类中设置数据库连接并创建一些保存和删除方法:

public class Database

    readonly SQLiteAsyncConnection _database;

    public Database (string dbPath)
    
        _database = new SQLiteAsyncConnection(dbPath);
        _database.CreateTableAsync<LeaveEntry>().Wait();
    

    public Task<List<LeaveEntry>> GetLeaveEntryAsync()
    
        return _database.Table<LeaveEntry>().ToListAsync();
    

    public Task<int> SaveLeaveEntry(LeaveEntry leaveEntry)
    
        return _database.InsertAsync(leaveEntry);
    

    public Task<int> DeleteLeaveEntry(LeaveEntry leaveEntry)
    
        return _database.DeleteAsync(leaveEntry);
    

使用 SaveLeaveEntry 方法,我可以成功地将休假条目添加到另一个页面上的列表视图,但我无法删除它们。在此列表视图页面上,当用户持有列表视图项时,我添加了一个带有删除按钮的菜单项。当他们选择删除菜单项时,我目前已将其设置为:

public void MenuItem_Clicked(object sender, EventArgs e)
    
        LeaveEntry itemToDelete = ((sender as MenuItem).BindingContext as LeaveEntry);

        // Unfinished code attempt
        await App.Database.DeleteLeaveEntry(new LeaveEntry
        
            ID = listView.SelectedItem.
        );
    

在我看来,我正在尝试使用选定的项目引用从数据库中提取该项目,但它根本没有做任何事情。我知道我在这里遗漏了一些简单的东西,但在这个问题上有点筋疲力尽。任何帮助表示赞赏。如果需要,可以提供更多代码或信息。

【问题讨论】:

您的listView.Selected 项目是整个LeaveEntry 对象吗?在这种情况下,你可以await App.Database.DeleteLeaveEntry((LeaveEntry)listView.SelectedItem); 为什么不直接做App.Database.DeleteLeaveEntry(itemToDelete) 【参考方案1】:

在我看来,我正在尝试使用选定的项目引用来拉 数据库中的那个项目,但它根本什么都不做。

您应该使用当前持有的物品作为方法DeleteLeaveEntry的参数,而不是创建一个新物品。

请尝试以下代码:

 LeaveEntry itemToDelete = ((sender as MenuItem).BindingContext as LeaveEntry);
 App.Database.DeleteLeaveEntry(itemToDelete);

注意:

另外,如果你不触发你的listview的事件ItemSelectedlistView.SelectedItem的值将会是null

【讨论】:

好了,搞定了。我意识到列表视图项目正在被删除但在我离开页面并返回之前不会更新,所以我想我只需要添加一个刷新方法或者可能再次触发 OnAppearing 方法。非常感谢您的帮助。

以上是关于Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行的主要内容,如果未能解决你的问题,请参考以下文章

如何在不关闭菜单的情况下选择菜单项?

万亿级市场预制菜也开始内卷,品牌如何在激烈竞争中脱颖而出?

如何在 ios 13 中禁用 pdfkit pdfview 中的查找、共享、转发菜单项

鸟哥的linux私房菜 哪些内容要看

小驰私房菜_10_camx Otp Dump

从“菜篮子”到“菜盘子”,预制菜企业如何乘势而上抢占亿万市场新蓝海?