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!


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.


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.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.


A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.


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.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras


A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.


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".


A IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.


Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!


O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.


Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.


O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.


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.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.


O primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.


Excesso de barulho dentro do seu gabinete, principalmente logo que você o liga, pode ser sintoma de problemas nas ventoinhas, que podem precisar ser limpas ou trocadas. Entre em contato com um técnico de sua confiança e verifique isso o quanto antes.


O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.


O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.


Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.