通过CommandName="Delete"
我尝试从ListView控件中删除一行,但不从数据源中删除。 On Press Delete我希望网页重新加载并显示更新的ListView(删除一行)。但没有任何变化,ListView将在按Delete后显示相同的内容。我做错了什么?
<asp:ListView ID="ListView1"
DataSourceID="XmlDataSource1"
ItemContainerId="DataSection"
runat="server">
<LayoutTemplate>
<h3>Protocols to Upload...</h3>
<table border=0 style="background-color:#9C9EFF; width: 100%;">
<tr align=left>
<th>Region/Exam/Program</th><th>Protocol</th><th>Position</th>
</tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%#XPath("Location/Path")%></td>
<td><%#XPath("Location/Name")%></td>
<td><%#XPath("Location/Position")%></td>
<td style="width:40px">
<asp:LinkButton ID="SelectCategoryButton" runat="server" Text="Select" CommandName="Select"/>
</td>
</tr>
</ItemTemplate>
<SelectedItemTemplate>
<tr id="Tr1" runat="server" style="background-color:#F7F3FF">
<td><%#XPath("Location/Path")%></td>
<td><%#XPath("Location/Name")%></td>
<td><%#XPath("Location/Position")%></td>
<td style="width:40px">
<asp:LinkButton runat="server" ID="SelectCategoryButton" Text="Delete" CommandName="Delete" />
</td>
</tr>
</SelectedItemTemplate>
<%-- <ItemSeparatorTemplate>
<div style="height: 0px;border-top:dashed 1px #ff0000"></div>
</ItemSeparatorTemplate>--%>
</asp:ListView>
<asp:XmlDataSource ID="XmlDataSource1" XPath="HttpRequestBO/ProtocolsDTO/ProtocolDTO" runat="server"
DataFile="~/HttpRequestBo.Sample.xml"></asp:XmlDataSource>
这就是背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ListView1_OnItemDeleted(Object sender, ListViewDeletedEventArgs e)
{
if (e.Exception != null)
{
e.ExceptionHandled = true;
}
}
protected void ListView1_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if (String.Equals(e.CommandName, "Delete"))
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
ListView1.Items.Remove(dataItem);
}
}
如果我不使用e.ExceptionHandled = true;
,则在按下删除链接后,网页将显示“不支持指定的方法”。信息。为什么呢?
如果我使用上面提到的行,那么页面刷新但我仍然可以看到所有原始行(虽然在调试时我可以看到ListVieItem集合现在只包含较少的项目。)
答案 0 :(得分:3)
这是因为DatasourceID参数绑定了原始文件的每一个回发。
您应该做的是仅在第一页加载时绑定您的列表。删除按钮将按预期工作。
---评论后。
行。 实际上,如果已在数据源上定义了Delete方法,则Delete命令将起作用。由于这不是您想要的,您必须定义ItemCommand事件处理程序 并告诉它删除发出该事件的ListViewItem。
protected void yourListView_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if (String.Equals(e.CommandName, "Delete"))
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
yourListView.Items.Remove(dataItem);
}
}
它会在不触及下面的XML文件的情况下这样做。不要对它进行数据绑定,否则“已删除”行将再次出现。