繁体   English   中英

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

[英]Xamarin/SQLite/C# - How to delete a row from listview and SQLite table with menu item delete

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

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

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

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

在我看来,我正在尝试使用选定的项目引用从数据库中提取该项目,但它只是什么都不做。

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

请尝试以下代码:

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

笔记:

此外,如果您不触发listviewItemSelected事件,则listView.SelectedItem的值将为null

基本删除方法

using (SQLiteConnection conn = new SQLiteConnection(App.databaseLocation))
            {
                conn.CreateTable<DATA>();
                var list = conn.Table<DATA>().Where(x => x.text == "asd").ToList();
                for (int i = 0; i < list.Count; i++)
                {
                   conn.Delete(list[i]);
                }
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM