如何:允许用户删除 DataList Web 服务器控件中的项
更新:2007 年 11 月
可允许用户以各种方法删除 DataList 控件中的项。一种方法是在项中包含**“删除”**按钮,当用户单击该按钮时立即删除该项。
另一种方法是在单个项中包括复选框。用户随后可以选中所有要移除的项,然后单击单独的**“删除”**按钮成批删除它们。此方法在如 MSN Hotmail 这样的程序中使用。
允许用户删除单个项
向页面添加数据源控件。
为数据源控件定义删除命令或方法。
例如,如果正在使用 SqlDataSource 控件,则将数据源控件的 DeleteCommand 属性设置为 SQL Delete 语句,该语句包含 ID 的占位符,如下面的示例所示:
DELETE FROM Categories WHERE CategoryID = @CategoryID
如果正在使用 ObjectDataSource 控件,则将 DeleteMethod 属性设置为执行删除的方法的名称。
在数据源控件中,为 DeleteParameters 属性创建一项,该属性包含一个用于要删除记录的 ID 的参数。
例如,一个 SqlDataSource 元素可能看起来类似于下面这样:
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" ConnectionString= "<%$ ConnectionStrings:NorthwindConnectionString %>" DeleteCommand="DELETE FROM [Categories] WHERE [CategoryID] = @CategoryID"> <DeleteParameters> <asp:Parameter Type="Int32" Name="CategoryID"> </asp:Parameter> </DeleteParameters> </asp:SqlDataSource>
说明: 其他命令,如 SelectCommand 和 UpdateCommand,未在该示例中显示。
一个 ObjectDataSource 元素可能看起来类似于下面这样:
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" DeleteMethod="DeleteCategory()"> <DeleteParameters> <asp:Parameter Name="example"></asp:Parameter> </DeleteParameters> </asp:ObjectDataSource>
在 DataList 控件中,将 DataKeyField 属性设置为想要从中删除记录的表的主键。
在 ItemTemplate(以及 AlternatingItemTemplate,如果您在使用它)中,添加 Button 或 LinkButton Web 服务器控件。
将该按钮的 CommandName 属性设置为 delete。
DataList 控件元素的标记可能看起来类似于下面这样:
<asp:DataList ID="DataList1" Runat="server" DataSourceID="SqlDataSource1" DataKeyField="CategoryID" OnDeleteCommand="DataList1_DeleteCommand"> <ItemTemplate> CategoryName: <asp:Label ID="CategoryNameLabel" Runat="server" Text='<%# Eval("CategoryName") %>'> </asp:Label> <br /> Description: <asp:Label ID="DescriptionLabel" Runat="server" Text='<%# Eval("Description") %>'> </asp:Label> <br /> <asp:Button ID="Delete" Runat="server" Text="Delete" CommandName="delete" /> </ItemTemplate> </asp:DataList>
为 DataList 控件的 DeleteCommand 事件创建一个事件处理程序。在方法中:
从 DataList 控件的 DataKeys 集合获取要删除的记录的 ID。可以使用当前项的 ItemIndex 属性返回的索引获取当前记录的键。
为在第 3 步中创建的参数设置 DefaultValue 属性。
调用数据源控件的 Delete 方法。
下面的代码使用名为 SqlDataSource1 的 SqlDataSource 控件作为数据源演示这些任务:
Protected Sub DataList1_DeleteCommand(ByVal source As Object, ByVal e As DataListCommandEventArgs) Dim id As Integer = _ CInt(DataList1.DataKeys(e.Item.ItemIndex)) SqlDataSource1.DeleteParameters("CategoryID").DefaultValue _ = id SqlDataSource1.Delete() End Sub
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e) { int id = (int)DataList1.DataKeys[e.Item.ItemIndex]; SqlDataSource1.DeleteParameters["CategoryID"].DefaultValue = id; SqlDataSource1.Delete(); }
允许用户一次删除多个项
如上述过程所述,向该页添加一个数据源控件,配置其删除命令或方法,并创建一个参数。
在 DataList 控件的 ItemTemplate(以及 AlternatingItemTemplate,如果您在使用它)中,添加一个 CheckBox Web 服务器控件,并将其 ID 属性设置为一个特定名称,如“Delete”。确保 CheckBox 控件的 AutoPostBack 属性设置为 false。
向该页添加一个 Button Web 服务器控件。将 Text 属性设置为“全部删除”,并将 ID 属性设置为 DeleteAll。此按钮不添加到 DataList 模板之一。
为**“全部删除”**按钮的 Click 事件创建方法。在方法中:
下面的示例显示 DeleteAll 按钮的事件处理程序,它使用上面所述的过程成批删除项。
[Visual Basic]
[C#]