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

时间:2014-04-26 16:15:25

标签: c# asp.net listview records

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

即多个选择项目,然后从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>

2 个答案:

答案 0 :(得分:1)

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

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

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

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

第一步:

在项目tempalte中添加工具提示并将其绑定到记录项目的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

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

答案 1 :(得分:0)

从头脑中编写未检查代码.. 如果我不记得错误,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 / DataSet,一个IDictionary,一个DataView?或者你可以在Asp.Net中使用的其他东西?

我告诉任何有关于它的索引实现..你可以使用这些索引实现..

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