Neste artigo vou mostrar como podemos criar uma aplicação Web acessando o MySQL via Entity Framework e realizando o CRUD usando um controle GridView. |
Na primeira parte do artigo criamos o projeto, definimos a tabela e o banco de dados, criamos o modelo de entidades e criamos a página Default.aspx definindo a interface com o usuário usando o GridView e os recursos do BootStrap.
Vamos agora definir o código nos eventos do controle GridView para realizar a manutenção dos dados.
Abrindo a solução no VS Community
Abra o VS Community 2015 e clique em Open Project;
Selecione o projeto GridView_MySQL criado na primeira parte do artigo.
No início do arquivo, após a declaração da classe vamos criar uma instância do nosso contexto para poder acessar as entidades mapeadas pelo entity framework:
Dim db As New cadastroEntities()Dessa forma db agora é uma instância do contexto de entidades que iremos usar para acessar as entidades mapeadas.
A seguir abra o arquivo Default.aspx.vb (o code-behind) e no evento Load inclua o código abaixo:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
BindGrid()
End If
End Sub
|
Verificamos se não ocorre um postback e chamamos o método BindGrid() que é mostrado a seguir:
Private Sub BindGrid()
Dim query = From emp In db.funcionarios.ToList()
If query.Count() > 0 Then
grdFuncionarios.DataSource = query
grdFuncionarios.DataBind()
End If
End Sub
|
Neste método estamos fazendo uma LINQ usando o nosso contexto para retornar todos os funcionários cadastrados na tabela funcionarios. (Nota: em uma aplicação de produção nunca retorne todos os registros de uma tabela. Use uma cláusula Where, por exemplo, para restringir o número de registros retornados)
No evento Click do botão Salvar insira o código abaixo:
Protected Sub btnSalvar_Click(sender As Object, e As EventArgs)
Try
'obtem os dados do novo funcionário
Dim funci As New funcionario
funci.nome = txtNome.Text
funci.cargo = txtCargo.Text
funci.salario = Convert.ToInt32(txtSalario.Text)
'adiciona o novo funci no contexto e persiste os dados na tabela
db.funcionarios.Add(funci)
db.SaveChanges()
BindGrid()
txtCargo.Text = String.Empty
txtNome.Text = String.Empty
txtSalario.Text = String.Empty
Catch ex As Exception
lblaviso.Text = "Erro :" & ex.Message
End Try
End Sub
|
O código do evento Click do botão Cancelar, dado a seguir, apenas limpa os controles:
Protected Sub btnCancelar_Click(sender As Object, e As EventArgs)
'limpa as caixas de texto
txtCargo.Text = String.Empty
txtNome.Text = String.Empty
txtSalario.Text = String.Empty
End Sub
|
Agora vamos ao código dos eventos RowEditing que edita a linha selecionada e RowCancelingEdit que cancela a edição:
Protected Sub grdFuncionarios_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles grdFuncionarios.RowEditing
grdFuncionarios.EditIndex = e.NewEditIndex
BindGrid()
End Sub
Protected Sub grdFuncionarios_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs) Handles grdFuncionarios.RowCancelingEdit
grdFuncionarios.EditIndex = -1
BindGrid()
End Sub
|
No evento RowUpdating estamos atualizado os dados do funcionário:
Protected Sub grdFuncionarios_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles grdFuncionarios.RowUpdating
Try
'obtem os dados do gridview
Dim hfFunciId As HiddenField = DirectCast(grdFuncionarios.Rows(e.RowIndex).FindControl("hfFunciId"), HiddenField)
Dim txtGridNome As TextBox = DirectCast(grdFuncionarios.Rows(e.RowIndex).FindControl("txtGridNome"), TextBox)
Dim txtGridCargo As TextBox = DirectCast(grdFuncionarios.Rows(e.RowIndex).FindControl("txtGridCargo"), TextBox)
Dim txtGridSalario As TextBox = DirectCast(grdFuncionarios.Rows(e.RowIndex).FindControl("txtGridSalario"), TextBox)
Dim codigo As Integer = Convert.ToInt32(hfFunciId.Value)
'localiza o funcionário
Dim funci As funcionario = (From f In db.funcionarios Where f.id = codigo Select f).FirstOrDefault()
'atualiza os dados do funcionario
funci.nome = txtGridNome.Text
funci.cargo = txtGridCargo.Text
funci.salario = Convert.ToInt32(txtGridSalario.Text)
'persiste as alterações
db.SaveChanges()
grdFuncionarios.EditIndex = -1
BindGrid()
Catch ex As Exception
lblaviso.Text = "Erro :" & ex.Message
End Try
End Sub
|
Para excluir um funcionários usamos o evento RowDeleting :
Protected Sub grdFuncionarios_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles grdFuncionarios.RowDeleting
Try
'obtem os dados do grid
Dim hfFunciId As HiddenField = DirectCast(grdFuncionarios.Rows(e.RowIndex).FindControl("hfFunciId"), HiddenField)
Dim codigo As Integer = Convert.ToInt32(hfFunciId.Value)
'localiza o funcionario
Dim funci As funcionario = (From f In db.funcionarios Where f.id = codigo Select f).FirstOrDefault()
'remove o funci do contexto
db.funcionarios.Remove(funci)
'persiste os dados
db.SaveChanges()
BindGrid()
Catch ex As Exception
lblaviso.Text = "Erro :" & ex.Message
End Try
End Sub
|
Vamos usar também o evento RowDataBound para solicitar a confirmação da exclusão ao usuário:
Protected Sub grdFuncionarios_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles grdFuncionarios.RowDataBound
Try
If e.Row.RowState = (DataControlRowState.Edit Or DataControlRowState.Alternate) Or e.Row.RowState = DataControlRowState.Edit Then
Return
End If
'verifica o tipo de linha
If e.Row.RowType = DataControlRowType.DataRow Then
'Referencia ao linkbutton delete
Dim deleteButton As ImageButton = DirectCast(e.Row.Cells(4).Controls(0), ImageButton)
deleteButton.OnClientClick = "if (!window.confirm('Confirma a exclusão deste registro ?')) return false;"
End If
Catch ex As Exception
lblaviso.Text = "Erro :" & ex.Message
End Try
End Sub
|
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui : GridView_Linq_MySQL.zip
Jesus Cristo é o mesmo, ontem, e hoje, e
eternamente.
Hebreus 13:8
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET- Usando GridView (C#) para iniciantes - Macoratti ...