共用方式為


HOW TO:允許使用者刪除 DataList Web 伺服器控制項中的項目

更新:2007 年 11 月

您可允許使用者利用幾種方法來刪除 DataList 控制項中的項目。方法之一是將 [刪除] 按鈕包含在項目中,當使用者按一下按鈕時,便會立即刪除這個項目。

另一種方法是將核取方塊包含在個別項目中。使用者便可以核取希望移除的所有項目,並按一下另一 [刪除] 按鈕,批次刪除這些項目。這個方法可用在 MSN Hotmail 之類的程式當中。

若要允許使用者刪除個別項目

  1. 將資料來源控制項加入至頁面。

  2. 定義資料來源控制項的刪除命令或方法。

    例如,如果使用 SqlDataSource 控制項,請將資料來源控制項的 DeleteCommand 屬性設定為包含 ID 預留位置的 SQL Delete 陳述式,如下列範例所示:

    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>
    
    注意事項:

    範例中並未顯示其他像是 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 控制項項目的標記 (Markup) 看起來可能如下所示:

    <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 屬性設定為 "Delete All",並且將 ID 屬性設定為 DeleteAll。這個按鈕不會加入至任一 DataList 範本。

  4. 為 [全部刪除] 按鈕的 Click 事件建立方法。在這個方法中:

    1. DataList 控制項的 Items 集合進行迴圈作業,輪流擷取每個項目。

    2. 在項目中,使用項目的 FindControl 方法取得步驟 1 中的 CheckBox 控制項,並測試它的 Checked 屬性。

    3. 如果方塊是核取的,則從資料來源刪除對應項目。

    以下範例將顯示 DeleteAll 按鈕的事件處理常式,使用上述程序批次刪除項目。

    [Visual Basic]

[C#]

請參閱

參考

DataList Web 伺服器控制項概觀