不能从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));
    }

不能从listview (sqlite中的值)中删除选中的项

更改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";
        }
    }