不能从listview (sqlite中的值)中删除选中的项
本文关键字:删除 sqlite 不能 listview | 更新日期: 2023-09-27 18:13:25
我试图从列表视图中删除选定的项目。这些值存储在数据库中。我在sqlite中试过。如何删除数据库中存在的值并更新listview
private void Button_Click_3(object sender, RoutedEventArgs e)
{
var dbpath = ApplicationData.Current.LocalFolder.Path + "/Mydb1.db";
var con = new SQLiteAsyncConnection(dbpath);
var stt=con.QueryAsync<list>("delete from list where list1='"+list_view.SelectedItem+"'");
con.DeleteAsync(stt);
update();
}
public async void update()
{
var dbpath = ApplicationData.Current.LocalFolder.Path + "/Mydb1.db";
var con = new SQLiteAsyncConnection(dbpath);
List<list> mylist = await con.QueryAsync<list>("select * from list");
if (mylist.Count != 0)
{
list_view.ItemsSource = mylist;
list_view.DisplayMemberPath = "list1";
}
}
这里list1是列名,list是表名
我放置了一个断点并执行了代码。它显示了一个异常(不能删除任务' 1:它没有PK),我认为PK是异常中的列名,一旦检查下面的代码,从sqlite类触发异常
public int Delete (object objectToDelete)
{
var map = GetMapping (objectToDelete.GetType ());
var pk = map.PK;
if (pk == null) {
throw new NotSupportedException ("Cannot delete " + map.TableName + ": it has no PK");
}
var q = string.Format ("delete from '"{0}'" where '"{1}'" = ?", map.TableName, pk.Name);
return Execute (q, pk.GetValue (objectToDelete));
}
更改sql查询。当您在查询中赋值(list_view.Selecteditem)时,数据库无法识别选中的值,因为语句selecteditem对于列表中的多个项是熟悉的。因此,首先存储选中的项并将其传递到查询中。
private async void Button_Click_3(object sender, RoutedEventArgs e)
{
var dbpath = ApplicationData.Current.LocalFolder.Path + "/Mydb1.db";
var con = new SQLiteAsyncConnection(dbpath);
if (list_view.SelectedItem != null)
{
list k = (list)list_view.SelectedItem;
await con.QueryAsync<list>("delete from list where list1='" + k.list1 + "'");
update();
}
public async void update()
{
var dbpath = ApplicationData.Current.LocalFolder.Path + "/Mydb1.db";
var con = new SQLiteAsyncConnection(dbpath);
list_view.ItemsSource = new List<list>();
List<list> mylist = await con.QueryAsync<list>("select * from list");
if (mylist.Count != 0)
{
list_view.ItemsSource = mylist;
list_view.DisplayMemberPath = "list1";
}
}