HOW TO:允許使用者刪除 DataList Web 伺服器控制項中的項目
更新:2007 年 11 月
您可允許使用者利用幾種方法來刪除 DataList 控制項中的項目。方法之一是將 [刪除] 按鈕包含在項目中,當使用者按一下按鈕時,便會立即刪除這個項目。
另一種方法是將核取方塊包含在個別項目中。使用者便可以核取希望移除的所有項目,並按一下另一 [刪除] 按鈕,批次刪除這些項目。這個方法可用在 MSN Hotmail 之類的程式當中。
若要允許使用者刪除個別項目
將資料來源控制項加入至頁面。
定義資料來源控制項的刪除命令或方法。
例如,如果使用 SqlDataSource 控制項,請將資料來源控制項的 DeleteCommand 屬性設定為包含 ID 預留位置的 SQL Delete 陳述式,如下列範例所示:
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 控制項項目的標記 (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>
為 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 屬性設定為 "Delete All",並且將 ID 屬性設定為 DeleteAll。這個按鈕不會加入至任一 DataList 範本。
為 [全部刪除] 按鈕的 Click 事件建立方法。在這個方法中:
以下範例將顯示 DeleteAll 按鈕的事件處理常式,使用上述程序批次刪除項目。
[Visual Basic]
[C#]