如何:允许用户删除 DataList Web 服务器控件中的项

更新:2007 年 11 月

可允许用户以各种方法删除 DataList 控件中的项。一种方法是在项中包含**“删除”**按钮,当用户单击该按钮时立即删除该项。

另一种方法是在单个项中包括复选框。用户随后可以选中所有要移除的项,然后单击单独的**“删除”**按钮成批删除它们。此方法在如 MSN Hotmail 这样的程序中使用。

允许用户删除单个项

  1. 向页面添加数据源控件。

  2. 为数据源控件定义删除命令或方法。

    例如,如果正在使用 SqlDataSource 控件,则将数据源控件的 DeleteCommand 属性设置为 SQL Delete 语句,该语句包含 ID 的占位符,如下面的示例所示:

    DELETE FROM Categories WHERE CategoryID = @CategoryID
    

    如果正在使用 ObjectDataSource 控件,则将 DeleteMethod 属性设置为执行删除的方法的名称。

  3. 在数据源控件中,为 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>
    
    efx1fwb6.alert_note(zh-cn,VS.90).gif说明:

    其他命令,如 SelectCommandUpdateCommand,未在该示例中显示。

    一个 ObjectDataSource 元素可能看起来类似于下面这样:

    <asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" 
            DeleteMethod="DeleteCategory()">
        <DeleteParameters>
            <asp:Parameter Name="example"></asp:Parameter>
        </DeleteParameters>
    </asp:ObjectDataSource>
    
  4. DataList 控件中,将 DataKeyField 属性设置为想要从中删除记录的表的主键。

  5. ItemTemplate(以及 AlternatingItemTemplate,如果您在使用它)中,添加 ButtonLinkButton Web 服务器控件。

  6. 将该按钮的 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>
    
  7. DataList 控件的 DeleteCommand 事件创建一个事件处理程序。在方法中:

    1. DataList 控件的 DataKeys 集合获取要删除的记录的 ID。可以使用当前项的 ItemIndex 属性返回的索引获取当前记录的键。

    2. 为在第 3 步中创建的参数设置 DefaultValue 属性。

    3. 调用数据源控件的 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();
    }
    

允许用户一次删除多个项

  1. 如上述过程所述,向该页添加一个数据源控件,配置其删除命令或方法,并创建一个参数。

  2. DataList 控件的 ItemTemplate(以及 AlternatingItemTemplate,如果您在使用它)中,添加一个 CheckBox Web 服务器控件,并将其 ID 属性设置为一个特定名称,如“Delete”。确保 CheckBox 控件的 AutoPostBack 属性设置为 false。

  3. 向该页添加一个 Button Web 服务器控件。将 Text 属性设置为“全部删除”,并将 ID 属性设置为 DeleteAll。此按钮不添加到 DataList 模板之一。

  4. 为**“全部删除”**按钮的 Click 事件创建方法。在方法中:

    1. 依次通过 DataList 控件的 Items 集合,按顺序提取每一项。

    2. 在项内,使用该项的 FindControl 方法获取步骤 1 的 CheckBox 控件,然后测试其 Checked 属性。

    3. 如果该框处于选中状态,则从数据源中删除相应的项。

    下面的示例显示 DeleteAll 按钮的事件处理程序,它使用上面所述的过程成批删除项。

    [Visual Basic]

[C#]

请参见

参考

DataList Web 服务器控件概述