Aprenda C#

  • Página Inicial
  • Contato!
  • Tudo sobre C# Parte 1!
  • Tudo sobre C# Parte 2!
  • Tudo sobre C# Parte 3!
  • Tudo sobre C# Parte 4!
  • Tudo sobre C# Parte 5!
  • Tudo sobre C# Parte 6!
  • Tudo sobre C# Parte 7!
  • Tudo sobre C# Parte 8!
  • Tudo sobre C# Parte 9!
  • Tudo sobre C# Parte 10!
  • C# com Banco de Dados Parte 3

    Form de Gestão de Usuários - Parte 2

    Na classe Banco, altere todas as conexões para que elas tenham sua própria conexão, veja o código de uma delas:

    
    public static DataTable obterTodosUsuarios() {
        SQLiteDataAdapter dataAp = null;
        DataTable dataTab = new DataTable();
    
        try {
            SQLiteConnection conn = conexaoBanco();
    
            SQLiteCommand comando = conn.CreateCommand();
    
            comando.CommandText = "select * from usuario";
    
            dataAp = new SQLiteDataAdapter(comando.CommandText, conn);
    
            dataAp.Fill(dataTab);
    
            conn.Close();
    
            return dataTab;
        }
        catch(Exception ex) {
            MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
        
            return null;
        }
    }
    
    

    Faça o mesmo de todas as funções da classe.

    Na classe Banco também, crie essa função:

    
    // Funções do Form Gestão Usuários:
    
    public static DataTable obterUsuarioIdNome() {
        SQLiteDataAdapter dataAp = null;
        DataTable dataTab = new DataTable();
    
        try {
            SQLiteConnection conn = conexaoBanco();
    
            SQLiteCommand comando = conn.CreateCommand();
    
            comando.CommandText = "select id as 'ID', nome as 'Nome' from usuario";
    
            dataAp = new SQLiteDataAdapter(comando.CommandText, conn);
    
            dataAp.Fill(dataTab);
    
            conn.Close();
    
            return dataTab;
        } 
        catch(Exception ex) {
            MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
            return null;
        }
    }
    
    

    Coloque no evento load do gestão usuários esse código:

    
    private void GestaoUsuarios_Load(object sender, EventArgs e) {
        dvgUser.DataSource = Banco.obterUsuarioIdNome();
    }
    
    

    Nas propriedades do DataViewGrid, coloque o EnableHeadersVisualStyle como false, MultiSelect como false, SelectionMode como FullRowSelect,em ColumnReadesDefaultCellStyle coloque a opção SelectionBackColor como a mesma cor do BackColor e SelectionForeColor como a de ForeColor, e coloque RowHeaderVisible como false.

    Altere o Load de gestão usuários assim:

    
    private void GestaoUsuarios_Load(object sender, EventArgs e) {
        dvgUser.DataSource = Banco.obterUsuarioIdNome();
    
        dvgUser.Columns[0].Width = 85;
        dvgUser.Columns[1].Width = 190;
    }
    
    

    E na classe Banco, coloque esse método:

    
    public static DataTable obterDadosUsuario(int id) {
        SQLiteDataAdapter dataAp = null;
        DataTable dataTab = new DataTable();
    
        try {
            SQLiteConnection conn = conexaoBanco();
    
            SQLiteCommand comando = conn.CreateCommand();
    
            comando.CommandText = "select * from usuario where id = @id";
    
            comando.Parameters.AddWithValue("@id", id);
    
            comando.CommandType = CommandType.Text;
    
            dataAp = new SQLiteDataAdapter(comando.CommandText, conn);
    
            dataAp.SelectCommand = comando;
    
            dataAp.Fill(dataTab);
    
            conn.Close();
    
            return dataTab;
        }
        catch(Exception ex) {
            MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
            return null;
        }
    }
    
    

    No dataViewGrid, adicione o evento selectionChanged e coloque esse código:

    
    private void dvgUser_SelectionChanged(object sender, EventArgs e) {
        // No sender vem o dataViewGrid que chamou o método
        DataGridView dgv = (DataGridView)sender;
        int cont = dgv.SelectedRows.Count;
    
        if(cont > 0) {
            DataTable dataTab = new DataTable();
            
            int id = int.Parse(dgv.SelectedRows[0].Cells[0].Value.ToString());
            char stat;
    
            dataTab = Banco.obterDadosUsuario(id);
    
            txtId.Text = dataTab.Rows[0].Field<Int64>("id").ToString();
            txtNome.Text = dataTab.Rows[0].Field<string>("nome").ToString();
            txtUser.Text = dataTab.Rows[0].Field<string>("username").ToString();
            txtSenha.Clear();
    
            stat = dataTab.Rows[0].Field<string>("status").ToString().ToCharArray()[0];
    
            switch(stat) {
                case 'A':
                    cbStat.Text = "Ativo";
                    break;
                case 'B':
                    cbStat.Text = "Bloqueado";
                    break;
                default:
                    cbStat.Text = "Desativado";
                    break;
            }
    
            numNiv.Value = dataTab.Rows[0].Field<Int64>("nivel");
        }
    }
    
    

    Form de Gestão de Usuários - Parte 3

    Simplesmente faça assim no evento do botão Novo:

    
    private void btnNov_Click(object sender, EventArgs e) {
        NovoUsuario novoUser = new NovoUsuario();
    
        novoUser.ShowDialog();
    
        dvgUser.DataSource = Banco.obterUsuarioIdNome();
    }
    
    

    Adicione esse método na classe Banco:

    
    public static void atualizarUsuario(Usuario u) {
        SQLiteDataAdapter dataAp = null;
        DataTable dataTab = new DataTable();
    
        try {
            SQLiteConnection conn = conexaoBanco();
    
            SQLiteCommand comando = conn.CreateCommand();
    
            comando.CommandText = "update usuario set nome = @nome, username = @username, senha = @senha, status = @status, nivel = @nivel where id = @id";
    
            comando.Parameters.AddWithValue("@nome", u.nome);
            comando.Parameters.AddWithValue("@username", u.username);
            comando.Parameters.AddWithValue("@senha", u.senha);
            comando.Parameters.AddWithValue("@status", u.status);
            comando.Parameters.AddWithValue("@nivel", u.nivel);
            comando.Parameters.AddWithValue("@id", u.id);
    
            dataAp = new SQLiteDataAdapter(comando.CommandText, conn);
    
            comando.ExecuteNonQuery();
    
            conn.Close();
        }
        catch(Exception ex) {
            MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
    

    No botão Salvar de Gestão Usuários coloque isso:

    
    private void btnSalv_Click(object sender, EventArgs e) {
        if(int.Parse(txtId.Text) <= 0) {
            MessageBox.Show("ID Inexistente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    
            return;
        }
    
        int linha = dvgUser.SelectedRows[0].Index;
        Usuario user = new Usuario();
    
        user.id = int.Parse(txtId.Text);
        user.nome = txtNome.Text.Trim();
        user.username = txtUser.Text.Trim();
        user.senha = CriptSenha.encripta(txtSenha.Text.Trim(), "SHA-1");
        user.status = cbStat.Text.ToCharArray()[0].ToString();
        user.nivel = (int)numNiv.Value;
    
        if(!txtNome.Text.Trim().Equals("") && !txtUser.Text.Trim().Equals("") && !txtSenha.Text.Trim().Equals("")) {
            DataTable dataTab = Banco.obterDadosUsuario(user.id);
            string senhaDb = dataTab.Rows[0].Field<string>("senha").ToString();
            
            if(senhaDb != user.senha) {
                DialogResult res = MessageBox.Show("A Senha é Diferente da que Está no Banco!\nDeseja Substituí-la?", "Pergunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    
                if(res == DialogResult.No) {
                    return;
                }
            }
    
            Banco.atualizarUsuario(user);
    
            // dvgUser.DataSource = Banco.obterUsuarioIdNome();
            // dvgUser.CurrentCell = dvgUser[0, linha]; // Isso é pra manter a linha alterada selecionada.
    
            dvgUser[1, linha].Value = txtNome.Text.Trim(); // O número é a coluna a partir do zero
        }
        else {
            MessageBox.Show("Preencha Todos os Campos!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
    
    

    Na classe Banco, crie essa função:

    
    public static void excluirUsuario(int id) {
        SQLiteDataAdapter dataAp = null;
        DataTable dataTab = new DataTable();
    
        try {
            SQLiteConnection conn = conexaoBanco();
    
            SQLiteCommand comando = conn.CreateCommand();
    
            comando.CommandText = "delete from usuario where id = @id";
    
            comando.Parameters.AddWithValue("@id", id);
    
            dataAp = new SQLiteDataAdapter(comando.CommandText, conn);
    
            comando.ExecuteNonQuery();
    
            conn.Close();
        }
        catch(Exception ex) {
            MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
    

    E no gestão usuários, basta colocar isso no botão Excluir:

    
    private void btnExcl_Click(object sender, EventArgs e) {
        DialogResult res = MessageBox.Show("Deseja Excluir o Cadastro do Banco de Dados?", "Pergunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    
        if(res == DialogResult.Yes) {
            Banco.excluirUsuario(int.Parse(txtId.Text));
    
            // Para deletar a linha selecionada do dataViewGrid fazemos assim:
            dvgUser.Rows.Remove(dvgUser.CurrentRow);
    
            txtId.Text = 0.ToString();
            txtNome.Clear();
            txtUser.Clear();
            txtSenha.Clear();
            cbStat.Text = "Desativado";
            numNiv.Value = 1;
        }
    }