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");
}
}
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;
}
}