Minicursos - C#

DataGridView - DataTable - DataAdapter


Esse tópico será um pouco mais extenso que os anteriores, e talvez mais importante, pois falarei sobre três assuntos fundamentais para a criação de qualquer aplicativo, que são o DataGridView, DataTable e DataAdapter. Antes de entrarmos no código e em alterações em nosso aplicativo de cadastro de clientes, vamos às perguntas que nos permitirão prosseguir com a atualização do programa.

O que é um DataGridView?

O DataGridView é um componente capaz de exibir dados em formatos tabulares. Ele pode criar linhas ou colunas dinamicamente, de acordo com os dados que receber. Estes dados podem ser originados pelo próprio usuário, por um arquivo texto ou por um banco de dados, que é o mais comum. É possível personalizar um DataGridView, alterando suas cores, fontes e até ocultando colunas, que é um artifício muito útil, já que uma coluna oculta não é exibida ao usuário, mas pode ter seus dados processados normalmente pela aplicação.

O que é um DataTable?

O DataTable é só uma classe que nos fornece várias funcionalidades para manipular dados que serão representados em forma tabular. Na prática ele acaba funcionando como um recipiente temporário para armazenamento de dados, pois ele é alimentado com o resultado de uma consulta feita ao banco de dados, e depois serve para alimentar o DataGridView.

O que é um DataAdapter?

O DataAdapter é um adaptador capaz de interligar classes que manipulam dados em C# e o banco de dados em si. No nosso aplicativo o utilizaremos para interligar um DataTable com o MySQL.

Bem, estes foram os três importantes conceitos que serão utilizados aqui para a remoção dos clientes cadastrados em nosso banco de dados. Nenhum deles é difícil e seus nomes são bastante sugestivos para suas próprias funções.

O DataGridView exibe dados tabulares, em formato de um Grid, por isso este nome. O DataTable armazena temporariamente os dados em formato de uma tabela e o DataAdapter é um adaptador, que funciona quase como um tradutor entre classes que manipulam dados no C# e o banco de dados. É simples!

Agora vamos continuar...

Vou abrir nossa pequena aplicação de exemplo e, em seguida, o formulário frmRemoveCliente, que atualmente está da seguinte forma:

DataGridView - DataTable - DataAdapter

Vou fazer uma pequena alteração nele antes de falarmos sobre o DataGridView em si. Vejam como ficará:

DataGridView - DataTable - DataAdapter

Adicionei um botão “Procurar”, que chamei de btnProcurar, e movi o botão “Remover” para baixo. Agora vou arrastar o DataGridView da barra de ferramentas para o formulário, deixando-o da seguinte forma:

DataGridView - DataTable - DataAdapter

Em seguida vou desmarcar os checkboxes que habilitam adição, edição e remoção do conteúdo do DataGridView, pois não faremos a manipulação dos dados dessa forma, através da Interface.

Após desmarcar estas três opções, vamos redimensionar o componente, para que ele ocupe, na horizontal, quase todo o formulário, conforme ilustra a figura abaixo:

DataGridView - DataTable - DataAdapter

Agora vou renomear o DataGridView para dgvCliente, alterando sua propriedade (Name).

Na sequência vamos inserir o Namespace para manipulação dos dados MySQL, ou seja, a using MySql.Data.MySqlClient;

Em seguida vamos criar estes objetos dentro do "public partial class frmRemoveCliente : Form"

private MySqlConnection minhaConexao;
private MySqlCommand meuComando;
private MySqlDataAdapter objAdapter;

Mais abaixo, dentro do método construtor do formulário, ou seja, o public frmRemoveCliente(), colocarei a string de conexão com o banco, deixando-o da seguinte forma:

public frmRemoveCliente()
{
InitializeComponent();
minhaConexao = new MySqlConnection("Persist Security Info = False; server = localhost; database = ContemBits; uid = root; pwd = root");
}

Por enquanto nosso código teve as seguintes alterações:

DataGridView - DataTable - DataAdapter

Agora vamos fazer uma pausa e entender a dinâmica deste formulário. A ideia é que o usuário digite, no Textbox, o nome do cliente que deseja excluir e o sistema exiba, abaixo, todos os clientes com aquele nome (ou parte dele). Então, após selecionar um deles no DataGridView, ele clique no botão “Remover” e essa remoção aconteça. Como primeiro passo, então, vamos nos preocupar com a busca a partir do nome digitado.

A string que fará isso no banco de dados a partir do nome digitado pelo usuário será:

string strComandoMySQL = "SELECT nome AS Nome, cidade AS Cidade, email AS Email FROM cliente WHERE Nome like '%" + txtNomeCadastroRemocao.Text + "%'";

Eu inseri as porcentagens no parâmetro like para que seja possível buscar também a partir de partes dos nomes. Pedi a exibição de apenas 3 colunas (Nome, Cidade e E-mail), embora nossa tabela tenha bem mais que isso.

Esta string pode ser criada dentro do código referente ao evento Click do botão Procurar. Também dentro deste bloco de código criaremos nosso DataTable, que armazenará temporariamente a tabela retornada do banco de dados. O código, por enquanto, deverá ficar da seguinte forma:

DataGridView - DataTable - DataAdapter

Agora que temos nosso DataTable pronto, vamos inserir o código completo do botão Procurar.

DataGridView - DataTable - DataAdapter

Comentando a parte que nos interessa, depois da verificação de conexão aberta, temos:

DataGridView - DataTable - DataAdapter

O código completo deste formulário ficará como ilustra a figura abaixo:

DataGridView - DataTable - DataAdapter

Bem, agora vou executar a aplicação e, como tenho um usuário chamado "Daniel Neri" cadastrado no banco de dados, vou pedir uma busca pelo usuário chamado "Dan", pois como o código MySQL foi montado para buscar pedaços do nome, devemos ter o retorno deste usuário. Vejamos:

DataGridView - DataTable - DataAdapter

Aí está o usuário cadastrado no banco!

E notem que as colunas automaticamente geradas no DataGridView são as que determinamos na busca no comando MySQL. Apenas para relembrar, o comando foi:

DataGridView - DataTable - DataAdapter

No entanto, antes de pensarmos no código da remoção em si, vamos melhorar um pouco o visual do DataGridView. Vamos começar alterando a propriedade BackgroundColor:

DataGridView - DataTable - DataAdapter

Em seguida vamos alterar a AutoSizeColumnsMode para que fique com o valor Fill. Esta propriedade faz com que as colunas retornadas pelo SGBD ocupem todo o DataGridView, conforme ilustra a imagem abaixo:

DataGridView - DataTable - DataAdapter

E executando, veremos o DataGridView da seguinte forma:

DataGridView - DataTable - DataAdapter

A aparência já ficou melhor, mas podemos melhorar ainda mais. Da forma como está é possível que o usuário adicione linhas à nossa DataGridView, ou edite as existentes, mas não queremos isso. Neste exemplo queremos fazer uso desta importante ferramenta apenas para exibir os dados, portanto vamos alterar mais quatro propriedades, que são:

ReadOnly, que ficará com o valor True
AllowUserToAddRows, que deverá valer False
AllowUserToDeleteRows, que também valerá False
ColumnHeaderHeightSizeMode, com valor de AutoSize

Executando agora, teremos:

DataGridView - DataTable - DataAdapter

Agora não temos mais a última linha em branco, para adição de dados, e o DataGridView é somente leitura, ou seja, apenas para exibição de dados, como gostaríamos.

Para tornar mais nítido as operações a seguir, vou cadastrar mais dois usuários com nomes parecidos com o meu, deixando a consulta pelo trecho “Dan” retornando os seguintes resultados:

DataGridView - DataTable - DataAdapter

A partir de agora vamos começar o código para remoção de dados. A ideia é que o usuário selecione um cliente a ser removido e com essa seleção faremos a remoção dos dados do banco. Vamos iniciar o código do botão "Remover" da seguinte forma:

int indice = dtgCliente.CurrentRow.Index;
string temporaria = dtgCliente[2, indice].Value.ToString();

Comentando, teremos:

DataGridView - DataTable - DataAdapter


DataGridView - DataTable - DataAdapter

Então, agora que temos o email do cliente armazenado na variável “temporaria”, fica fácil montar a string de comando para ser executada no MySQL. Vou demonstrar abaixo e já efetuar a execução, vejam:

DataGridView - DataTable - DataAdapter

Como é possível observar no código acima, a string de conexão foi montada na variável strComandoMySQL, com o comando de remoção sendo concatenado com a variável temporaria. O restante do código já não contém nenhuma novidade.

Vou executar e tentar a remoção do usuário "Danilo Ferreira".

DataGridView - DataTable - DataAdapter

Apenas para constatar que a remoção foi realmente bem sucedida, vou entrar novamente no formulário de remoção de clientes e buscar por todos os clientes que tenham “Dan” no nome, vejam:

DataGridView - DataTable - DataAdapter

Nosso usuário "Danilo Ferreira" não foi encontrado!

Com isso fechamos o tópico sobre remoção de dados. Caso algum dos três importantes conceitos vistos aqui (DataGridView, DataTable e DataAdapter) não tenha ficado claro, sugiro que voltem ao início e leiam o texto novamente. Eles são realmente importantes.

No tópico seguinte faremos a parte de alteração de dados de usuários já cadastrados!



Algumas notícias

Xiaomi 12 Ultra poderá ter câmera de incríveis 200MP

Um recente vazamento de dados ocorrido na rede social Weibo mostrou que a Xiaomi estaria trabalhando em um novo modelo top de linha, o Xiaomi 12 Ultra, com um sensor de poderosíssimos 200MP de resolução. Rumores já haviam sido trazidos à tona sobre essa possibilidade, inclusive com a suspeita de...

Ler Notícia Completa

Google Pixel 5a está superaquecendo durante as gravações de vídeos

Os boatos iniciais de que o novo celular da Google, o Pixel 5a, superaquecia, parece que se confirmaram. O aparelho é capaz de gravar vídeos em resolução 4K e com taxa de 60 frames por segundo, porém, superaquece a tal ponto que emite mensagem de alerta ao usuário, solicitando o desligamento do...

Ler Notícia Completa

Android 12 permitirá controle do celular através de expressões faciais

A nova versão do sistema operacional do Google, o Android 12, promete trazer uma interessante funcionalidade. Chamada de “Camera Switches”, a função faz parte do conjunto de aplicativos para acessibilidade e permite que, utilizando a câmera frontal do aparelho, o usuário possa executar uma série...

Ler Notícia Completa

Xiaomi revela detalhes e aparelhos que receberão a MIUI 12.5

A Xiaomi divulgou os detalhes da sua nova interface, a MIUI 12.5, que promete trazer correção para mais de 280 problemas atualmente conhecidos pela empresa. A ideia é que a nova versão esteja disponível até o final de agosto em pelo menos 12 modelos de smartphones da Xiaomi. Veja abaixo a rela...

Ler Notícia Completa

Samsung Galaxy F22

Lançado em julho de 2021, o Samsung Galaxy F22 é um aparelho que merece ser considerado por você que não pode gastar muito e não precisa de configurações de hardware top de linha, mas quer um aparelho de boa qualidade. O aparelho vem com processador octa-core (2 x 2Ghz + 6 x 1.8Ghz), opções com...

Ler Notícia Completa

Xiaomi Redmi K40 Gaming

O Redmi K40 Gaming ou Redmi K40 Gaming Edition chegou e ele impõe respeito! Como o próprio nome sugere, ele é voltado ao público gamer, com uma configuração capaz de rodar, sem grandes dificuldades, todos os jogos lançados até então. Com processador octa-core (1 x 3GHz + 3 x 2.6GHz + 4 x 2.0GHz)...

Ler Notícia Completa

Galaxy M42 5G

O Samsung Galaxy M42 5G promete chamar a atenção dentre os celulares intermediários. O aparelho conta com processador octa-core (2 x 2.2GHz + 6 x 1.7Ghz), possui versões com 6 ou 8Gb de memória RAM e 128Gb de armazenamento interno. Seu tamanho, de 6.6 polegadas, e sua tela de Super AMOLED, com...

Ler Notícia Completa

Realme 8 5G

Finalmente a Realme lançou o Realme 8 5G. O aparelho traz um conjunto interessante de componentes, com uma tela generosa de 6.5 polegadas de IPS LCD de 90Hz e resolução de 1080 x 2400 pixels (uma densidade de 405 pixels por polegada), qualidade que atende até aos usuários mais exigentes. O proce...

Ler Notícia Completa

Sony Xperia 10 III

Lançado em abril de 2021, o Sony Xperia 10 III chegou com um design extremamente elegante e configurações poderosas, principalmente no que se refere à gravação de vídeo. Seu conjunto de câmeras triplas (12, 8 e 8MP, sendo a última ultrawide) é capaz de gravar vídeos em 4K com 30fps e exce...

Ler Notícia Completa

Poco X3 GT

Anunciado no mês passado, o Poco X3 GT chegou e tem como alvo inicial o Oriente Médio e Ásia. O aparelho traz uma configuração interessante, com tela IPS LCD de 120Hz com HDR10 de 6.6 polegadas e resolução de 1080 x 2400 pixels. Ele possui três câmeras (64, 8(ultrawide) e 2MP) na parte...

Ler Notícia Completa

Procura por celulares 5G aumenta e preços caem

Um recente levantamento feito pelo Buscapé e o grupo Mosaico apontou que nos últimos 12 meses a procura por celulares 5G aumentou significativamente no Brasil. O aumento ultrapassa os 450% somente no primeiro semestre de 2021. Os preços, nesse mesmo período, sofreram uma redução de 15%. Modelos...

Ler Notícia Completa

Sem câmera aparente, vem aí o Mi Mix 4 da Xiaomi

Ao que tudo indica, o novo modelo top de linha da gigante chinesa Xiaomi será oficialmente anunciado na próxima terça-feira, dia 10/08. Embora a empresa não tenha divulgado detalhes técnicos do aparelho, acredita-se que ele terá câmera sob a tela, sem qualquer entalhe ou furo na parte frontal...

Ler Notícia Completa

Youtube pagará mais de 50 mil reais para criadores de conteúdo do Shorts

O Shorts, recentemente criado pelo Youtube, promete fazer pagamentos generosos a seus criadores de conteúdo. A empresa pretende pagar até US$ 100 milhões nos próximos 12 meses, tudo isso com o objetivo de impulsionar sua nova criação, que, como o próprio nome sugere, são vídeos curtos. As exigên

Ler Notícia Completa

O Windows 365 já chegou - Conheça os valores e detalhes da assinatura

O Windows 365 está disponível para ser assinado aqui no Brasil. Trata-se de uma plataforma que roda na nuvem e que permite a execução tanto do Windows 10 quanto do Windows 11, assim que este último for lançado oficialmente. A assinatura permitirá que você utilize o sistema operacional da Micro...

Ler Notícia Completa

Amazon divulga detalhes do Luna - Seu serviço de streaming de jogos

Na última terça-feira a Amazon deu detalhes sobre seu serviço de streaming de jogos, o Luna. Trata-se de um serviço por assinatura, semelhante ao que faz o Netflix com filmes e séries. Com ele os jogos são trazidos para o seu dispositivo, seja uma TV, computador ou mesmo o iPhone, através da Int...

Ler Notícia Completa

Windows 10 terá modificações no Menu Iniciar

A Microsoft liberou algumas imagens do novo Menu Iniciar, que deverá fazer parte do sistema operacional Windows 10 a partir de 2021. A primeira impressão é de que o objetivo da empresa é tornar o menu mais integrado ao restante da área de trabalho, através de blocos translúcidos, as “Live Tiles”...

Ler Notícia Completa

Alemanha autoriza primeiros testes de vacina contra Covid-19 em humanos

A Alemanha é mais um país a entrar na fase de testes de uma vacina contra a Covid-19 com humanos. O Instituto Paul Ehrlich, que opera como a agência regulatória federal alemã para vacinas e biomedicina, anunciou nesta quarta-feira (22) a autorização para o início dos estudos clínicos, que devem...

Ler Notícia Completa

Dispositivo de apenas 5 dólares detecta o HIV em poucos minutos

Com custo de apenas US$ 5, o pequeno aparelho permite ao usuário fazer o próprio diagnóstico O designer britânico Hans Ramzan criou um dispositivo capaz de identificar o HIV em questão de minutos. O aparelho é de uso simples, barato, e o teste pode ser feito em casa, ajudando na identifcação rá...

Ler Notícia Completa

Você sabia?

O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.

Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.

As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.

Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".

Ajude o Contém Bits com um cafezinho!

Se você gostou do artigo, se ele lhe foi útil de alguma maneira e você quiser ajudar o Contém Bits, saiba que é simples, fácil e rápido. Basta clicar na imagem do PayPal (ou no cafezinho) e seguir as instruções, em ambiente seguro e com o respaldo do Paypal. Eu agradeço muito! :)


Você gostará destes vídeos!