使用ASP.Net C#从ListView中删除多个记录

本文关键字:删除 记录 ListView ASP Net 使用 | 更新日期: 2023-09-27 18:00:13

在使用C#从ListView中删除之前使用确认。我有一个带复选框的ListView,我想从ListView中删除带复选框选择的项目/记录。

即多个选择项目,然后从ListView中删除这些多个记录我使用SqlDataSource绑定数据:)有什么想法吗?

<asp:ListView runat="server" ID="listBaiBao" OnSorting="listBaiBao_Sorting">
        <LayoutTemplate>
            <table id="tblBaiBao" class="table table-bordered table-hover tablesorter">
                <tr runat="server">
                    <th runat="server"><asp:CheckBox OnCheckedChanged="chkAll_CheckChanged" runat="server" ID="chkAll"/></th>
                    <th runat="server"><asp:LinkButton CommandName="Sort" CommandArgument="TenBaiBao" ID="lnkTen" runat="server">Tên bài báo <i class="fa fa-sort"></i></asp:LinkButton></th>
                    <th runat="server"><asp:LinkButton runat="server" CommandName="Sort" CommandArgument="SoBao" ID="lnkSoBao">Số báo <i class="fa fa-sort"></i></asp:LinkButton></th>
                    <th runat="server"><asp:LinkButton runat="server" CommandName="Sort" CommandArgument="NamPhatHanh" ID="lnkNamPH">Năm phát hành <i class="fa fa-sort"></asp:LinkButton></i></th>
                    <th runat="server"><asp:LinkButton runat="server" CommandName="Sort" CommandArgument="TacGia" ID="lnkTacGia">Tác giả <i class="fa fa-sort"></i></asp:LinkButton></th>
                    <th runat="server"><asp:LinkButton runat="server" CommandName="Sort" CommandArgument="DuongDanFile" ID="lnkDuongDan">Đính kèm <i class="fa fa-sort"></i></asp:LinkButton></th>
                    <th runat="server">Edit</th>
                </tr>
                <tr id="ItemPlaceholder" runat="server">
                </tr>
            </table>
            <asp:DataPager ID="ItemDataPager" runat="server" PageSize="10">
                <Fields>
                    <asp:NumericPagerField CurrentPageLabelCssClass="pagenum-active" NumericButtonCssClass="pagenum" NextPreviousButtonCssClass="pagenum" ButtonCount="2" />
                </Fields>
            </asp:DataPager>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:CheckBox runat="server" ID="chk"/>
                </td>
                <td>
                    <asp:Label runat="server" Text='<%# Eval("TenBaiBao") %>'></asp:Label></td>
                <td>
                    <asp:Label runat="server" Text='<%# Eval("SoBao") %>'></asp:Label></td>
                <td>
                    <asp:Label runat="server" Text='<%# Eval("NamPhatHanh") %>'></asp:Label></td>
                <td>
                    <asp:Label runat="server" Text='<%# Eval("TacGia") %>'></asp:Label></td>
                <td>
                    <asp:Label runat="server" Text='<%# Eval("DuongDanFile") %>'></asp:Label></td>
                <td>
                    <a class="btn btn-info" href='index.aspx?page=suabaibao&id=<%# Eval("MaBaiBao") %>'><i class="fa fa-edit"></i></a>
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

使用ASP.Net C#从ListView中删除多个记录

使用每个复选框的属性名称来设置记录的id。当您选择多个复选框并单击删除筛选所有复选框并从属性名称读取每个id时,将这些id传递给您查询以删除记录。

然后重新填充您的列表并重新绑定到ListItem:)

注意,我不知道你的数据库怎么样,我想你有一个id作为主键:)

更新解决方案两步实现您的目标:

第一步:

在项目临时添加工具提示,并将其绑定到记录项目的ID:

<asp:checkbox runat="server" id="yourID" ToolTip="<%Eval("ITEMID")%>/>

您将使用此数据存储记录的主键,以便在步骤2中获取它我假设你有一个按钮来删除所有选中的记录,所以在点击它的事件中,你可以使用这个代码来获取所有选中复选框的所有ID

  Protected Sub btnDeleteAllChecked_Click(sender As Object, e As EventArgs)
    Dim ListItems As New List(Of Integer)
    For Each el In listBaiBao.Items
        For Each item In el.Controls
            If TypeOf item Is CheckBox Then
                If DirectCast(item, CheckBox).Checked = True Then
                    ListItems.Add(DirectCast(item, CheckBox).ToolTip)
                End If
            End If
        Next
    Next
    'Delete record from your database 
    Using cnn As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("YOURCONNECTIONSTRING").ToString)
        'open the connection
        If cnn.State = ConnectionState.Closed Then cnn.Open()
        'formatting your query string 
        Dim Query As String = String.Format("DELETE FROM YOURTABLENAME WHERE ID IN({0})", String.Join(",", ListItems.ToArray()))
        Using cmd As New System.Data.SqlClient.SqlCommand(Query, cnn)
            'execute delete action, update your select and rebind your list view
            Try
                With cmd
                    .CommandType = CommandType.Text
                    'delete action
                    .ExecuteNonQuery()
                End With
                'ONCE DELETE HAS BEEN PERFORMED CHANGE CMD SELECT STATEMENT AD USE THE SAME COMMAND 
                'TO REBIND A DATABASE OR A DATABLE AS YOU PREFERE LIKE HERE
                Dim Da As New System.Data.SqlClient.SqlDataAdapter(cmd)
                Dim Ds As New System.Data.DataSet
                Da.Fill(Ds)
                'REBIND CONTROL
                listBaiBao.DataSource = Ds.Tables(0)
                listBaiBao.DataBind()
            Catch ex As Exception
                Response.Write(ex.Message)
            End Try
        End Using
    End Using
End Sub

这是基于我所知道的。我希望它能帮助你。如果它解决了您的问题,请将其标记为答案。如果你使用实体框架或任何其他方式来绑定你的控制,我需要知道,以帮助你

用心编写而非代码检查。。如果我不记得错误的ListView有RemoveAt()方法,它删除给定索引处的项。。

这个:

foreach ( ListViewItem item in yourListView.CheckedItems)
{
  yourListView.RemoveAt(yourListView.Items.IndexOf(item));
  //or with another option : 
  yourListView.Remove(item);
}

编辑:看到@makemoney2010的评论后。。

您将哪种类型的数据集合绑定到ListView?IList、DataTable/Datat、IDictionary、DataView?或者你可以在Asp.Net中使用的其他东西?

我告诉过的任何一个都有索引实现。你可以使用这些索引实现。。

作为最佳实践(以避免不必要的结果),如果您从基于Sql的数据源绑定数据,则应该实现主键。。然后一切都会更好