Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite table 中删除一行
Xamarin/SQLite/C# - How to delete a row from listview and SQLite table with menu item delete
问题: 所以这在编码论坛上并不是一个不常见的问题,但似乎人们应用删除按钮的方式多种多样,经过几天的尝试,我就我的方法寻求一些建议。
我有一个简单的应用程序,它接受一些用户输入并使用它来计算假期天数。我有一个像这样设置的简单 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; }
}
然后我在此 class 中设置数据库连接并创建一些保存和删除方法:
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 方法,我可以成功地将请假条目添加到另一页的列表视图中,但我无法删除它们。在此列表视图页面上,当用户持有列表视图项时,我添加了一个带有删除按钮的菜单项。当他们 select 删除菜单项时,我目前将其设置为:
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.
});
}
在我看来,我正在尝试使用 selected 项目引用从数据库中提取该项目,但它什么也没做。我知道我在这里遗漏了一些简单的东西,但在这个问题上有点精疲力尽。任何帮助表示赞赏。如果需要,可以提供更多代码或信息。
In my mind, I am trying to use the selected item reference to pull
that item from the db but it is simply doing nothing.
您应该使用当前持有的物品作为方法的参数DeleteLeaveEntry
,而不是创建新物品。
请尝试以下代码:
LeaveEntry itemToDelete = ((sender as MenuItem).BindingContext as LeaveEntry);
App.Database.DeleteLeaveEntry(itemToDelete);
注:
此外,如果您不触发listview
的事件ItemSelected
,listView.SelectedItem
的值将是null
。
问题: 所以这在编码论坛上并不是一个不常见的问题,但似乎人们应用删除按钮的方式多种多样,经过几天的尝试,我就我的方法寻求一些建议。
我有一个简单的应用程序,它接受一些用户输入并使用它来计算假期天数。我有一个像这样设置的简单 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; }
}
然后我在此 class 中设置数据库连接并创建一些保存和删除方法:
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 方法,我可以成功地将请假条目添加到另一页的列表视图中,但我无法删除它们。在此列表视图页面上,当用户持有列表视图项时,我添加了一个带有删除按钮的菜单项。当他们 select 删除菜单项时,我目前将其设置为:
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.
});
}
在我看来,我正在尝试使用 selected 项目引用从数据库中提取该项目,但它什么也没做。我知道我在这里遗漏了一些简单的东西,但在这个问题上有点精疲力尽。任何帮助表示赞赏。如果需要,可以提供更多代码或信息。
In my mind, I am trying to use the selected item reference to pull that item from the db but it is simply doing nothing.
您应该使用当前持有的物品作为方法的参数DeleteLeaveEntry
,而不是创建新物品。
请尝试以下代码:
LeaveEntry itemToDelete = ((sender as MenuItem).BindingContext as LeaveEntry);
App.Database.DeleteLeaveEntry(itemToDelete);
注:
此外,如果您不触发listview
的事件ItemSelected
,listView.SelectedItem
的值将是null
。