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
|
Campo: QuantityPerUnit
|
Campo: UnitPrice
|
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