如何通过 C# 中的 ListView for Windows 8 应用程序删除 SQLite 中的行

Posted

技术标签:

【中文标题】如何通过 C# 中的 ListView for Windows 8 应用程序删除 SQLite 中的行【英文标题】:How to delete row in SQLite via ListView in C# for Windows 8 app 【发布时间】:2015-05-24 20:15:24 【问题描述】:

这是我正在使用的代码。表 Events 中的 ListView AllEventsList 中的项目不会被删除。

private async void DeleteSelected(object sender, RoutedEventArgs e)
    
        try
        
            var dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "data.db3");
            using (var db = new SQLite.SQLiteConnection(dbpath))
            

                db.Delete<Events>(AllEventsList.SelectedItem.ToString());//selected item



                var d = from x in db.Table<Events>() select x;
                AllEventsList.Items.Clear();
                foreach (var sd in d)
                
                    AllEventsList.Items.Add(sd.EventName.ToString());
                

                db.Dispose();
                db.Close();  
            
            var line = new MessageDialog("Selected Item Deleted");
            await line.ShowAsync();
        
        catch
        
        
    

虽然这有效:

  db.DeleteAll<Events>();

【问题讨论】:

【参考方案1】:

试试这个,

foreach ( ListViewItem eachItem in AllEventsList.SelectedItems)

    AllEventsList.Items.Remove(eachItem);

【讨论】:

【参考方案2】:

我怀疑是ToString 没有给出您期望的值。尝试显式传递主键值,例如:

var primaryKey = ((Events)AllEventsList.SelectedItem).YourPrimaryKeyId;
db.Delete<Events>(primaryKey);

或者你可以直接调用这个版本的Delete,然后传入整个对象:

db.Delete(AllEventsList.SelectedItem);

一些注意事项:

我没有在上面的代码中进行错误条件处理。你将不得不这样做。例如,确保列表中确实有一个选定的项目,否则使用上面的代码,您将得到一个空引用异常。 您对DisposeClose 的调用是多余的。您可以删除它们,因为您已经在 using 块内。

【讨论】:

以上是关于如何通过 C# 中的 ListView for Windows 8 应用程序删除 SQLite 中的行的主要内容,如果未能解决你的问题,请参考以下文章

winform c# listview 如何 选中行!急!在线等!

winform c# listview 如何 选中行!急!在线等!

C#中Listview的数据复制到另外一个Listview的问题

C# winform编程 开发环境VS2010 listview控件问题

C#如何向listview中的一列添加LIST集合中的OBJECT数据

在c#如何将listview中的数据保存到数据库中的表中