如何通过 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);
一些注意事项:
我没有在上面的代码中进行错误条件处理。你将不得不这样做。例如,确保列表中确实有一个选定的项目,否则使用上面的代码,您将得到一个空引用异常。 您对Dispose
和Close
的调用是多余的。您可以删除它们,因为您已经在 using
块内。
【讨论】:
以上是关于如何通过 C# 中的 ListView for Windows 8 应用程序删除 SQLite 中的行的主要内容,如果未能解决你的问题,请参考以下文章
winform c# listview 如何 选中行!急!在线等!
winform c# listview 如何 选中行!急!在线等!
C#中Listview的数据复制到另外一个Listview的问题
C# winform编程 开发环境VS2010 listview控件问题