Compartilhar via


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

  1. Adicione um controle de fonte de dados à página.

  2. 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.

  3. 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>
    
  4. No controle DataList, defina a propriedade DataKeyField para o chave primária da tabela de onde você deseja excluir registros.

  5. In the ItemTemplate (and AlternatingItemTemplate, if you are using it), add a Button or LinkButton Web server control.

  6. 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>
    
  7. Crie um manipulador de eventos para o evento DeleteCommand do controle DataList.No método:

    1. 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.

    2. Defina a propriedade DefaultValue do parâmetro que você criou na etapa 3.

    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

  1. 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.

  2. 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.

  3. 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.

  4. Crie um método para o evento Click do botão Excluir Tudo.No método:

    1. Um loop através da coleção Items do controle DataList, extraindo cada item por sua vez.

    2. Dentro do item, use o método FindControl do item para obter o controle CheckBox da etapa 1 e testar sua propriedade Checked.

    3. 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#]

Consulte também

Referência

Visão geral do controle DataList do servidor Web