Gewusst wie: Ermöglichen des Löschens von Elementen in DataList-Webserversteuerelementen
Aktualisiert: November 2007
Sie können Benutzern das Löschen von Elementen in einem DataList-Steuerelement auf unterschiedliche Weise ermöglichen. Eine Möglichkeit besteht im Hinzufügen einer Schaltfläche Löschen zu einem Element und dem sofortigen Löschen dieses Elements, wenn der Benutzer auf die Schaltfläche klickt.
Eine andere Möglichkeit besteht im Hinzufügen eines Kontrollkästchens in einzelnen Elementen. Dann können die Benutzer alle zu löschenden Elemente markieren und anschließend auf eine separate Schaltfläche Löschen klicken, um alle ausgewählten Elemente auf einmal zu löschen. Diese Methode wird in Programmen wie MSN Hotmail verwendet.
So ermöglichen Sie Benutzern das Löschen einzelner Elemente
Fügen Sie der Seite ein Datenquellensteuerelement hinzu.
Definieren Sie den Löschbefehl oder die Löschmethode für das Datenquellensteuerelement.
Wenn Sie zum Beispiel ein SqlDataSource-Steuerelement verwenden, legen Sie die DeleteCommand-Eigenschaft des Datenquellensteuerelements auf eine SQL-Delete-Anweisung fest, die einen Platzhalter für die ID enthält wie im folgenden Beispiel gezeigt:
DELETE FROM Categories WHERE CategoryID = @CategoryID
Wenn Sie ein ObjectDataSource-Steuerelement verwenden, legen Sie die DeleteMethod-Eigenschaft auf den Namen einer Methode fest, die die Löschoperation ausführt.
Erstellen Sie im Datenquellensteuerelement einen Eintrag für die DeleteParameters-Eigenschaft, die einen einzelnen Parameter für die ID des zu löschenden Datensatzes enthält.
Ein SqlDataSource-Element könnte zum Beispiel folgendermaßen aussehen:
<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>
Hinweis: Andere Befehle wie der SelectCommand und der UpdateCommand werden im Beispiel nicht gezeigt.
Ein ObjectDataSource-Element könnte folgendermaßen aussehen:
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" DeleteMethod="DeleteCategory()"> <DeleteParameters> <asp:Parameter Name="example"></asp:Parameter> </DeleteParameters> </asp:ObjectDataSource>
Legen Sie im DataList-Steuerelement die DataKeyField-Eigenschaft auf den Primärschlüssel der Tabelle fest, aus der Sie Datensätze löschen möchten.
Fügen Sie ein Button-Webserversteuerelement oder ein LinkButton-Webserversteuerelement zum ItemTemplate (und zum AlternatingItemTemplate, falls Sie es verwenden) hinzu.
Legen Sie die CommandName-Eigenschaft der Schaltfläche auf delete fest.
Das Markup für das DataList-Steuerelement könnte folgendermaßen aussehen:
<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>
Erstellen Sie einen Ereignishandler für das DeleteCommand-Ereignis des DataList-Steuerelements. In der Methode:
Rufen Sie die ID des zu löschenden Datensatzes aus der DataKeys-Auflistung des DataList-Steuerelements ab. Sie können den Schlüssel des aktuellen Datensatzes abrufen, indem Sie den von der ItemIndex-Eigenschaft des aktuellen Elements zurückgegebenen Index verwenden.
Legen Sie die DefaultValue-Eigenschaft des Parameters fest, den Sie in Schritt 3 erstellt haben.
Rufen Sie die Delete-Methode des Datenquellensteuerelements auf.
Das folgende Codebeispiel illustriert diese Aufgaben unter Verwendung eines SqlDataSource-Steuerelements, das als SqlDataSource1 bezeichnet wird und als Datenquelle dient:
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(); }
So ermöglichen Sie Benutzern das gleichzeitige Löschen mehrerer Elemente
Fügen Sie das Datenquellensteuerelemet zur Seite hinzu. Konfigurieren Sie den Löschbefehl oder die Löschmethode, und erstellen Sie den Parameter wie in der vorhergehenden Prozedur beschrieben.
Fügen Sie zu ItemTemplate (und zu AlternatingItemTemplate, wenn verwendet) des DataList-Steuerelements ein CheckBox-Webserversteuerelement hinzu, und legen Sie die ID-Eigenschaft dieses Webserversteuerelements auf einen bestimmten Namen fest wie zum Beispiel "Delete". Stellen Sie sicher, dass die AutoPostBack-Eigenschaft des CheckBox-Steuerelements auf false festgelegt ist.
Fügen Sie der Seite ein Button-Webserversteuerelement hinzu. Legen Sie die Text-Eigenschaft auf "Alles löschen" und die ID-Eigenschaft auf DeleteAll fest. Diese Schaltfläche wird zu keiner der DataList-Vorlagen hinzugefügt.
Erstellen Sie eine Methode für das Click-Ereignis der Schaltfläche Alles löschen. In der Methode:
Durchlaufen Sie die Items-Auflistung des DataList-Steuerelements, und extrahieren Sie dabei alle Elemente.
Verwenden Sie innerhalb des Elements die FindControl-Methode des Elements, um das CheckBox-Steuerelement aus Schritt 1 zu finden, und testen Sie seine Checked-Eigenschaft.
Wenn das Kontrollkästchen aktiviert ist, löschen Sie das entsprechende Element aus der Datenquelle.
Das folgende Beispiel zeigt einen Ereignishandler für die Schaltfläche DeleteAll, die mithilfe des oben beschriebenen Verfahrens alle Elemente gleichzeitig löscht.
[Visual Basic]
[C#]