单击按钮后如何根据其 ID 删除列表视图项? (C# UWP)
How to delete a listview item based on it's ID after button click? (C# UWP)
因此,我进行了一些谷歌搜索,结果很少,但仍然有结果。发生的事情是数据库在 CalendarEvents 中有 5 个条目(基本上 name/place/date/time 等未来的事件)。我从我的数据库中获取这些并将它们显示在列表视图中。
现在我需要管理员能够根据它的行删除 CalendarEvents,如下所示:
因此,每当管理员单击删除按钮时,它应该获取该按钮所属的 listviewitem 的 id(如数据库中的 1-5,id= CalendarEventsId),然后从数据库中删除正确的 CalendarEvent。
到目前为止,我已经想出了以下代码:
private async void tbdelete_Tapped(object sender, TappedRoutedEventArgs e)
{
var item = sender as DependencyObject;
while(!(item is ListViewItem))
{
item = VisualTreeHelper.GetParent(item);
}
var id = ((CalendarEvent) item).CalendarEventId;
var weburidelete = "http://localhost:64288/api/calendarevents/" + id;
HttpClient client = new HttpClient();
var res = await client.DeleteAsync(weburidelete);
}
我在使用 "var id = ((CalendarEvent) ... " 时遇到错误,它说 "cannot convert type "DependencyObject" to "CalendarEvent"。
因此,例如,如果管理员单击第三行的"delete"-按钮,则应从数据库中删除Id=3(不是listviewitemindex,数据库中的ID)的CalendarEvent。因此,如果我添加 5 个项目,删除所有 5 个然后再次添加 5 个,我相信新 5 个项目的 ID 范围为 6-10。
有人知道这里出了什么问题吗?或者有人知道另一种方法可以根据 ID 删除正确的 listviewitem 吗?
只需获取按钮的 DataContext 并进行转换。
var item = sender as Button;
var data = item.DataContext;
while(!(item is ListViewItem))
{
item = VisualTreeHelper.GetParent(item);
}
var id = ((CalendarEvent)data).CalendarEventId;
好吧,我所做的就是使用 Jessica 的方法来获取我的 DataContext,然后完全删除 "while"-loop。这就是 class 现在的样子,并且可以正常工作!
private async void tbdelete_Tapped(object sender, TappedRoutedEventArgs e)
{
var item = sender as Button;
var data = item.DataContext;
var id = ((CalendarEvent)data).CalendarEventId;
var weburidelete = "http://localhost:64288/api/calendarevents/" + id;
HttpClient client = new HttpClient();
var res = await client.DeleteAsync(weburidelete);
this.Frame.Navigate(typeof(AdminAgenda), null);
}
因此,我进行了一些谷歌搜索,结果很少,但仍然有结果。发生的事情是数据库在 CalendarEvents 中有 5 个条目(基本上 name/place/date/time 等未来的事件)。我从我的数据库中获取这些并将它们显示在列表视图中。
现在我需要管理员能够根据它的行删除 CalendarEvents,如下所示:
因此,每当管理员单击删除按钮时,它应该获取该按钮所属的 listviewitem 的 id(如数据库中的 1-5,id= CalendarEventsId),然后从数据库中删除正确的 CalendarEvent。
到目前为止,我已经想出了以下代码:
private async void tbdelete_Tapped(object sender, TappedRoutedEventArgs e)
{
var item = sender as DependencyObject;
while(!(item is ListViewItem))
{
item = VisualTreeHelper.GetParent(item);
}
var id = ((CalendarEvent) item).CalendarEventId;
var weburidelete = "http://localhost:64288/api/calendarevents/" + id;
HttpClient client = new HttpClient();
var res = await client.DeleteAsync(weburidelete);
}
我在使用 "var id = ((CalendarEvent) ... " 时遇到错误,它说 "cannot convert type "DependencyObject" to "CalendarEvent"。
因此,例如,如果管理员单击第三行的"delete"-按钮,则应从数据库中删除Id=3(不是listviewitemindex,数据库中的ID)的CalendarEvent。因此,如果我添加 5 个项目,删除所有 5 个然后再次添加 5 个,我相信新 5 个项目的 ID 范围为 6-10。
有人知道这里出了什么问题吗?或者有人知道另一种方法可以根据 ID 删除正确的 listviewitem 吗?
只需获取按钮的 DataContext 并进行转换。
var item = sender as Button;
var data = item.DataContext;
while(!(item is ListViewItem))
{
item = VisualTreeHelper.GetParent(item);
}
var id = ((CalendarEvent)data).CalendarEventId;
好吧,我所做的就是使用 Jessica 的方法来获取我的 DataContext,然后完全删除 "while"-loop。这就是 class 现在的样子,并且可以正常工作!
private async void tbdelete_Tapped(object sender, TappedRoutedEventArgs e)
{
var item = sender as Button;
var data = item.DataContext;
var id = ((CalendarEvent)data).CalendarEventId;
var weburidelete = "http://localhost:64288/api/calendarevents/" + id;
HttpClient client = new HttpClient();
var res = await client.DeleteAsync(weburidelete);
this.Frame.Navigate(typeof(AdminAgenda), null);
}