使用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>
答案 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的数据源绑定数据,则应实现主键。然后一切都会更好