ASP.NET - Excluindo registros no GridView com Checkbox


Vamos construir neste artigo uma interface para excluir registros de forma a apresentar ao usuário em um GridView a relação dos registros para exclusão permitindo que seja feita uma seleção dos registros a serem excluídos através da utilização do controle CheckBox.

Para o exemplo mostrado eu vou o Visual Web Developer 2005 e a tabela Products do banco de dados Northwind.mdf, portanto você vai precisar dos seguintes recursos instalados:

Todos os produtos acima gratuitos e podem ser obtidos via download e usados para desenvolvimento e distribuição sem pagamento adicional. É pegar , estudar e usar...

Nota: Para que o projeto funcione corretamente fazer uma copiar o banco de dados Northwind.mdf e no banco de dados que iremos usar remover o relacionamento entre a tabela Products e a tabela Orders_Details.

Inicie o VWD 2005 e crie um novo web site no menu File-New Web Site usando o template ASP .NET web site , location File System, linguagem Visual Basic com o nome de GridViewDeleteCheckBox;

Crie uma conexão com o banco de dados Northwind.mdf , se ela ainda não existir;

Seleciona a página Default.aspx e, no modo Design, inclua um controle GridView - gdvProducts e um botão de comando- btnDelete, na páginas a partir da ToolBox;

Vamos definir no GridView os campos da tabela que iremos exibir e criar um template Field para exibir o checkbox conforme a figura abaixo:

Para incluir os campos da tabela Products selecione o GridView e em GridView Tasks selecione Edit Columns;

Na janela Fields, em Available Fields, selecione BoundField e clique no botão Add definindo na janela de properties as seguintes propriedades:

Definição das colunas do GridView - gdvProducts
Campo: ProductName
HeaderText ProductName
SortExpression ProductName
DataField ProductName
Campo: QuantityPerUnit
HeaderText QuantityPerUnit
SortExpression QuantityPerUnit
DataField QuantityPerUnit
Campo: UnitPrice
HeaderText UnitPrice
SortExpression UnitPrice
DataField UnitPrice
DataFormating {0:C}

Para definir o Template Field , na janela Fields, em Available Fields, selecione a opção TemplateField e clique no botão Add;

A seguir defina a propriedade HeaderText como : Excluir Seleção e clique no botão OK;

Selecione novamente o GridView e em GridView Tasks selecione Edit Templates;

Em ItemTemplate inclua um controle CheckBox com o nome chk1 e um controle Label - lblID;

Selecione o Label incluído e em Edit DataBindings defina a vinculação com o campo ProductID da tabela Products pela expressão: Bind("ProductID")

Selecione o controle Button e defina sua propriedade Text como: Excluir Itens Selecionados;

Vamos agora criar o código para exibir os registros e no GridView e para excluir os itens selecionados.

Primeiro defina no arquivo web.config a string de conexão com o banco de dados Northwind.mdf. No exemplo eu estou usando a seguinte string de conexão definida no web.config: (No seu computador local a string poderá ser diferente.)

<connectionStrings>
<add name="NORTHWNDConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

Inclua a declaração para o namespace System.Data.SqlClient responsável pela conexão com o banco de dados;

Imports System.Data.sqlclient

Define a variável string para a string de conexão : Dim strConexao As String

Abra o arquivo Default.aspx.vb e no evento Load da página

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        strConexao = ConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").ConnectionString
        If Not Page.IsPostBack Then
            exibeGrid()
        End If
End Sub

Esta rotina obtém a string de conexão do arquivo web.config e verifica se é um postback para exibir os dados no GridView chamando a rotina exibeGrid();

A rotina exibeGrid() tem o seguinte código:

Sub exibeGrid()
        Dim Conn As New SqlConnection(strConexao)
        Dim dr As SqlDataReader
        Dim mySQL As String

        mySQL = "SELECT TOP 5 [ProductID], [ProductName], [QuantityPerUnit], [UnitPrice] FROM [Products]"

        Dim cmd As New SqlCommand(mySQL, Conn)
        Conn.Open()
     
       dr = cmd.ExecuteReader
        gvProducts.DataSource = dr
        gvProducts.DataBind()

        Conn.Close()
End Sub

Esta rotina seleciona somente os 5 primeiros registros da tabela Products e os exibe usando um DataReader no GridView;

O código do evento Click do botão btnDelete é o seguinte:

 Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Excluir()
 End Sub

A rotina Excluir() é mostrada abaixo:

Sub Excluir()
        Dim i As Integer
        For i = 0 To gvProducts.Rows.Count - 1
            Dim dgItem As GridViewRow = gvProducts.Rows(i)
            Dim lblid As Label = CType(dgItem.FindControl("lblid"), Label)
            Dim cb As CheckBox = CType(dgItem.FindControl("chk1"), CheckBox)
            If cb.Checked Then
                DeletaRegistro(CInt(lblid.Text))
            End If
        Next i
        exibeGrid()
End Sub

Esta rotina percorre as linhas do GridView e verifica se o controle CheckBox - chk1 - esta selecionado. Se existir a seleção a rotina DeletaRegistro() é chamada passando como parâmetro o código do produto contido no controle lblid;

A rotina DeletaRegistro() possui o seguinte código:

Sub DeletaRegistro(ByVal intProd As Integer)
        Dim Conn As New SqlConnection(strConexao)
        Dim cmd As New SqlCommand("Delete from Products where productID=@ProductID", Conn)
        cmd.Parameters.Add(New SqlParameter("@ProductID", intProd))
        Conn.Open()
        cmd.ExecuteNonQuery()
        Conn.Close()
End Sub

A rotina efetua as seguintes operações:

Como excluir registro pode ser uma tarefa perigosa vamos solicitar a confirmação do usuário usando uma função JavaScript.

Crie a seguinte rotina JavaScript e a inclua na seção <Head> </Head> da página:

<script language=javascript>
    function ConfirmaExclusao(){
        return confirm('Deseja excluir este registro?');
    }
</script>

No botão de comando btnDelete() inclua o defina o evento OnClientClick chamando a função JavaScript:

<asp:Button ID="btnDelete" runat="server" Text="Excluir Itens Selecionados" OnClick="btnDelete_Click" OnClientClick="javascript:return ConfirmaExclusao();"/>

Executando o projeto , ao selecionar alguns registros e clicar no botão de comando iremos obter:

Criamos assim uma interface para excluir registros com seleção através de CheckBox no GridView. Como exercício deixo para você otimizar a rotina JavaScript.

Eu sei é apenas ASP.NET , mas eu gosto...

Referências:


José Carlos Macoratti