gpt4 book ai didi

Asp.Net ListView如何删除一行而不从数据源中删除

转载 作者:行者123 更新时间:2023-12-02 10:02:54 25 4
gpt4 key购买 nike

通过 CommandName="Delete" 我尝试从 ListView 控件中删除一行,但不从数据源中删除一行。按删除后,我希望网页重新加载并显示更新后的 ListView(删除了一行)。但没有任何变化,按Delete后ListView将显示相同的内容。我做错了什么?

    <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 集合现在只包含一个项目。)

最佳答案

这是因为 DatasourceID 参数,该参数在原始文件的每次回发时都绑定(bind)。

您应该做的就是仅在首页加载时绑定(bind)您的列表。删除按钮将按照您的预期工作。

---评论后。

好的。事实上,如果您在数据源上定义了删除方法,则删除命令将起作用。由于这不是您想要的,因此您必须定义 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 文件的情况下执行此操作。不要对其进行数据绑定(bind),否则“已删除”行将再次出现。

关于Asp.Net ListView如何删除一行而不从数据源中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com