Esta é a versão C# do artigo que mostra como usar o Fluent NHibernate e o NHibernate 4.0 para criar uma aplicação que realiza o login e faz o registro de um novo usuário no banco de dados PostgreSQL mostrando também como realizar as operações CRUD de manutenção dos usuários usando o padrão Repository.
Na primeira parte deste artigo criamos o banco de dados Cadastro e a tabela usuarios no PostgreSQL , criamos o projeto no Visual Studio, definimos as referências ao NHibernate, Fluent NHibernate e ao provedor Npgsql, definimos as entidades, o mapeamento e criamos a nossa SessionFactory e o nosso repositório. Quanto trabalho não é mesmo?
Agora, vamos continuar criando os formulários de login e registro no projeto Usuarios e mostrar realizar o login e registrar usuários.
Criando o formulário de login e de registro
No projeto Usuarios altere o nome do formulário form1.vb para frmLogin.vb e a seguir inclua neste formulário os seguintes controles a partir da ToolBox:
- 2 GroupBox – Text = Login e Text = Usuários
- 2 Label
- 2 TextBox – txtUsuario e txtSenha
- 1 Button – btnLogin
- 1 DataGridView – dgvUsuarios
- 1 Picturebox
- 1 MenuStrip – Login : Exibir, Registrar e Sair
- 1 ErrorProvider
- 1 LinkLabel – Text = Registrar Novo Usuário
Disponha os controles conforme o leiaute da figura abaixo:
Vamos incluir os formulários frmRegistro e frmMenu no projeto.
No menu PROJECT clique em Add Windows Forms e informe o nome frmRegistro.cs.
Repita o procedimento e informe o nome frmMenu.cs. Vamos definir o leiaute desses formulários mais a frente.
Agora no código do formulário frmLogin.cs vamos primeiro incluir uma declaração para referenciar o projeto Repositorio:
Using Repositorio;
Logo após a declaração do formulário vamos definir uma variável do tipo UsuarioRepositorio:
UsuarioRepositorio usuarioRepo;
A seguir no evento Click do botão Login digite o código abaixo:
private void btnLogin_Click(object sender, System.EventArgs e) { errorProvider1.Clear(); if (txtUsuario.Text == string.Empty) { errorProvider1.SetError(txtUsuario, "Informe o login do usuário"); return; } if (txtSenha.Text == string.Empty) { errorProvider1.SetError(txtSenha, "Informe a senha do usuário"); return; } try { usuarioRepo = new UsuarioRepositorio(); if ((usuarioRepo.ValidarAcesso(txtUsuario.Text, txtSenha.Text))) { this.Hide(); frmMenu frmmnu = new frmMenu(); frmmnu.Show(); } else { MessageBox.Show("Login e/ou Senha inválidos", "Login Inválido", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch(Exception ex) { MessageBox.Show("Erro ao acessar o sistema" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Este código após realizar as validações das caixas de texto: txtUsuario, txtSenha, cria uma instância da classe UsuarioRepositorio e usa o método ValidarAcesso() para verificar se o usuário estácadastrado e ativo na tabela usuarios.
Vamos criar uma rotina chamada ExibirUsuarios() que exibe os usuários cadastrados no controle DataGridView – dgvUsuarios.
A seguir temos o código desta rotina criada no formulário:
private void ExibirUsuarios() { dao = new UsuarioRepositorio(); dgvUsuarios.DataSource = dao.Consultar(); }
No menu Exibir inclua o código abaixo que irá chamar a rotina ExibirUsuarios:
private void exibirToolStripMenuItem_Click(object sender, EventArgs e) { ExibirUsuarios(); }
No evento Click do controle LinkLabel – Registrar Novo Usuário – inclua o código para chamar o formulário frmRegistro:
private void lnklbRegistrar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { frmRegistro frmreg = new frmRegistro(); frmreg.Show(); }
E no evento Click da opção Registrar do menu inclua o código abaixo que simula o evento Click do controle LinkLabel acima:
private void registrarToolStripMenuItem_Click(object sender, EventArgs e) { //frmRegistro frmreg = new frmRegistro(); //frmreg.Show(); lnklbRegistrar_LinkClicked(lnklbRegistrar, null); }
Assim não estamos duplicando código e estamos chamando a mesma rotina para abrir o formulário de registro.
Agora vamos incluir os dois formulários ao projeto: frmRegistro e frmMenu.
No menu PROJECT clique em Add Windows Forms e informe o nome frmRegistro.cs.
Repita o procedimento e inclua o formulário frmMenu.cs.
No formulário frmRegistro inclua os seguintes controles a partir da ToolBox:
- 1 GroupBox : Text = Registrar Usuario
- 4 Label
- 3 TextBox : txtNome, txtLogin, txtSenha
- 1 Combobox : cboStatus ( Ativo e Inativo)
- 2 Button : btnIncluir e btnSair
- 1 ErrorProvider
Disponha os controles no formulário conforme o leiaute abaixo:
No código do formulário vamos primeiro incluir uma declaração para referenciar o projeto Repositorio e a pasta Entidades;
using Repositorio;
using Repositorio.Entidades;
No evento Load do formulário vamos definir o código para atribuir o primeiro item ao controle cboStatus e para por o foco no controle txtNome:
private void frmRegistro_Load(object sender, EventArgs e) { cboStatus.SelectedIndex = 0; this.ActiveControl = txtNome; txtNome.Focus(); }
A seguir no evento Click do botão Incluir digite o código abaixo:
private void btnIncluir_Click(object sender, EventArgs e) { errorProvider1.Clear(); if (txtNome.Text == string.Empty) { errorProvider1.SetError(txtNome, "Informe o nome do usuário"); return; } if (txtLogin.Text == string.Empty) { errorProvider1.SetError(txtLogin, "Informe o login do usuário"); return; } if (txtSenha.Text == string.Empty) { errorProvider1.SetError(txtSenha, "Informe a senha do usuário"); return; } UsuarioRepositorio usuarioRepo = new UsuarioRepositorio(); if ((usuarioRepo.ValidarLogin(txtLogin.Text))) { MessageBox.Show("Login já esta Cadastrado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { try { Usuario user = new Usuario(); user.Login = txtLogin.Text; user.Nome = txtNome.Text; user.Senha = txtSenha.Text; user.Status = retornaStatus(); usuarioRepo.Inserir(user); } catch (Exception ex) { MessageBox.Show("Erro ao cadastrar " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning); } MessageBox.Show("Login Cadastrado com sucesso", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
Após realizar as validações das caixas de texto: txtNome, txtLogin e txtSenha, este código cria uma instância da classe UsuarioRepositorio e usa o método ValidarLogin() para verificar se o login do usuário esta cadastrado. Se o login estiver cadastrado será exibida uma alerta, ao usuário caso contrário será criado um novo objeto Usuario que receberá os valores digitados nas caixas de texto e usando o método Inserir do repositório para incluir o novo usuário.
Nota: Talvez a utilização da combobox para exibir o status do usuário não fosse necessária e a definição de ativo ou inativo no registro de usuário devesse ser automática para o registro de usuário. No entanto resolvi mostrar como podemos tratar esse item. Se desejar pode remover o controle e o código correspondente.
A rotina retornaStatus() apenas ajusta o valor atribuído ao campo Status. O seu código é dado abaixo:
private char retornaStatus() { if (cboStatus.Text == "Ativo") { return 'A'; } else if (cboStatus.Text == "Inativo") { return 'I'; } else { return 'A'; } }
No evento Click do botão Sair temos o código abaixo que encerra o formulário:
private void btnSair_Click(object sender, EventArgs e) { this.Close(); }
O formulário frmMenu é usado apenas para exibir uma mensagem de bem-vindo ao usuário quando o login é efetuado com sucesso. Abaixo temos o seu leiaute:
Executando o projeto teremos:
Você pode incluir outros campos no login como email (usado para enviar a senha quando o usuário a esquece) e data de registro e também não precisa exibir a senha do usuário no DataGridView ocultando essa informação. Esses detalhes são simples de tratar e fica como exercício você decidir se vai ou não usar.
Na última parte do artigo irei implementar as funcionalidades para procurar um usuário, alterar e realizar a exclusão.
Pegue o projeto completo aqui: ControleUsuariosCSharp.zip (sem as referências)