mvc - listview c# asp.net example
Asp.Net ListVer cómo eliminar una fila sin eliminar de la fuente de datos (1)
A través de CommandName="Delete"
, trato de eliminar una línea del control ListView, pero no de la fuente de datos. Al presionar Eliminar, espero que la página web se vuelva a cargar y mostrarme el ListView actualizado (con una línea eliminada). Pero nada cambia, ListView mostrará el mismo contenido después de presionar Eliminar. ¿Qué hago mal?
<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>
Y este es el código detrás:
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);
}
}
Si no uso e.ExceptionHandled = true;
Después de presionar el enlace Eliminar, la página web mostrará "No se admite el método especificado". mensaje. ¿Por qué?
Si utilizo la línea mencionada anteriormente, la página se actualiza pero aún puedo ver todas las líneas originales (aunque al depurar puedo ver que la colección ListVieItem ahora solo contiene un elemento menos).
Se debe al parámetro DatasourceID, que se une a cada devolución de datos en el archivo original.
Lo que debe hacer es enlazar su lista en la carga de la primera página solamente. El botón Eliminar funcionará como espera entonces.
--- después de los comentarios.
DE ACUERDO. De hecho, el comando Eliminar funcionaría si hubiera definido el método Eliminar en su fuente de datos. Como eso no es lo que desea, debe definir el controlador de eventos ItemCommand y decirle que elimine el ListViewItem que emitió el evento.
protected void yourListView_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if (String.Equals(e.CommandName, "Delete"))
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
yourListView.Items.Remove(dataItem);
}
}
Lo hará sin tocar el archivo XML debajo. No separe nada de datos, de lo contrario la fila "borrada" aparecerá de nuevo.