Como: Permitir aos usuários excluir itens nos controles DataList do servidor Web
Você pode permitir que os usuários excluam itens em um controle DataList de várias maneiras.Uma maneira é incluir um botão Delete em um item e excluir o item desejado imediatamente quando o usuário clica nele.
Outra maneira é incluir uma caixa de seleção em itens individuais.Os usuários podem então verificar todos os itens que deseja remover e, em seguida clicar em um botão separado Delete para excluí-los em um lote.Este método é usado em programas como o MSN Hotmail.
Para permitir a usuários excluirem itens individuais
Adicione um controle de fonte de dados à página.
Defina o comando ou método delete para o controle de fonte de dados.
Por exemplo, se você estiver usando um controle SqlDataSource, defina a propriedade DeleteCommand do controle da fonte de dados para uma instrução SQL de Excluir que inclua um espaço reservado para a identificação, como no exemplo a seguir:
DELETE FROM Categories WHERE CategoryID = @CategoryID
Se você estiver usando um controle ObjectDataSource, defina a propriedade DeleteMethod como o nome de um método que realiza a exclusão.
No controle da fonte de dados, crie uma entrada para a propriedade DeleteParameters que inclui um único parâmetro para a identificação do registro a ser excluído.
Por exemplo, um elemento SqlDataSource pode parecer com o seguinte:
<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>
Observação: Outros comandos, como o SelectCommand e UpdateCommand não são mostrado no exemplo.
Um elemento ObjectDataSource pode parecer como a seguir.
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" DeleteMethod="DeleteCategory()"> <DeleteParameters> <asp:Parameter Name="example"></asp:Parameter> </DeleteParameters> </asp:ObjectDataSource>
No controle DataList, defina a propriedade DataKeyField para o chave primária da tabela de onde você deseja excluir registros.
In the ItemTemplate (and AlternatingItemTemplate, if you are using it), add a Button or LinkButton Web server control.
Defina a propriedade CommandName para o botão para delete.
A marcação para o elemento de controle DataList pode parecer com o seguinte:
<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>
Crie um manipulador de eventos para o evento DeleteCommand do controle DataList.No método:
Obtenha a identificação do registro para excluir a coleção DataKeys do controle DataList.Você pode obter a chave para o registro atual usando o índice retornado pela propriedade ItemIndex do item atual.
Defina a propriedade DefaultValue do parâmetro que você criou na etapa 3.
Chame o método Delete do controle da fonte de dados.
O código a seguir ilustra essas tarefas, usando um controle SqlDataSource chamado SqlDataSource1 como a fonte de dados:
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(); }
Para permitir que usuários excluam vários itens de uma vez
Adicione um controle de fonte de dados para a página, configure seu comando ou método delete, e crie um parâmetro conforme descrito no procedimento anterior.
No ItemTemplate (e AlternatingItemTemplate, se você o estiver usando) do controle DataList, adicione um controle de servidor Web CheckBox e defina sua propriedade ID como um nome específico, como "Excluir". Certifique-se de que que a propriedade AutoPostBack do controle CheckBox é definida como false.
Adicione um controle Button de servidor Web à página.Defina a propriedade Text para "Excluir Tudo" e a propriedade ID como DeleteAll.Este botão não é adicionado a um dos modelos DataList.
Crie um método para o evento Click do botão Excluir Tudo.No método:
Um loop através da coleção Items do controle DataList, extraindo cada item por sua vez.
Dentro do item, use o método FindControl do item para obter o controle CheckBox da etapa 1 e testar sua propriedade Checked.
Se a caixa estiver marcada, exclua o item correspondente da fonte de dados.
O exemplo a seguir mostra um manipulador de eventos para o botão DeleteAll que exclui itens em um lote usando o procedimento descrito acima.
[Visual Basic]
Private Sub DeleteAll_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles DeleteAll.Click Dim isDeleted As Boolean Dim itemIndex As Integer = 0 Dim id As String ' Check each box and see if the item should be deleted. For Each dlItem As DataListItem In DataList1.Items isDeleted = CType(dlItem.FindControl("Delete"), _ CheckBox).Checked If isDeleted Then id = DataList1.DataKeys(itemIndex).ToString() SqlDataSource1.DeleteParameters(0).DefaultValue = id SqlDataSource1.Delete() End If itemIndex += 1 Next End Sub
[C#]