sexta-feira, 13 de fevereiro de 2009
Artigo: Editando Templates, DataList
Esse exemplo se baseará no resultado que você ve quando pesquisa um livro em uma livraria, onde a livraria te mostra o preço, a imagem, a editora e outras informações.
Não acessarei os dados de um banco, eu os iniciarei em uma parte do programa, para que assim você apenas copie o código e o compile em seu micro e veja o mesmo resultado, você necessitará apenas mudar o caminho da figura.
Porém com algumas mudanças você poderá utilizar dados retornados do banco.
Primeiramente estas são as figuras que utilizarei:
1 - Inicie um novo programa Asp.NET Web Application e renomeie para ExemploDataGrid.
2 - Arraste um DataList para a página e escolha Edit Templates.
Agora você poderá arrastar componentes ou configurar o layout como se fosse uma página normal. Aliás se você ir em Source você poderá ver o HTML gerado para a edição de template.
3 - Insira uma tabela 2 x 2, para isso vá no menu do Visual Studio e clique em
Table->Insert Table.
Agora é só clicar em OK.
4 - Arraste três Labels e um Image, de forma que seu DataList fique igual ao da figura abaixo.
5 - Antes de continuarmos com a edição do DataList vamos criar uma classe chamada Livros, para isso clique em seu projeto com o botão direito do mouse e escolha
Add > New Item -> Class
Insira esse código em sua classe, que possui quatro propriedades e um construtor de quatro argumentos.
public class Livros {
public string Nome { get; set; }
public string Autor { get; set; }
public string Descricao { get; set; }
public string Imagem { get; set; }
public Livros( string nome, string autor, string descricao, string imagem ) {
this.Nome = nome;
this.Autor = autor;
this.Descricao = descricao;
this.Imagem = imagem;
}
}
6 - Agora voltamos para editar nosso DataList, de um clique em cima do primeiro Label e escolha Edit DataBindings...
7 - Para os Labels selecione Text e coloque Eval("propriedade"), o exemplo abaixo se refere ao nome:
Faça o mesmo com o segundo e o terceiro Label colocando respectivamente
Eval("Autor") e Eval("Descricao"), no Image selecione ImageURL e coloque Eval("Imagem"), repare que você usa suas propriedades da classe, o nome deve ser idêntico. Isso não funcionará com variável, apenas com propriedade.
8 - Agora nossa última parte, adicione esse código no Page_Load da página.
public partial class _Default : System.Web.UI.Page {
protected void Page_Load( object sender, EventArgs e ) {
List <Livros> livros = new List <Livros>( );
livros.Add(new Livros("C# - Como Programar",
"Deitel",
"Livro de C#",
@"seucaminho"));
livros.Add(new Livros("Microsoft Visual C# 2005",
"John Sharp",
"Livro de C#",
@"seucaminho"));
this.DataList1.DataSource = livros;
this.DataList1.DataBind( );
}
}
9 - Resultado:
Pronto está feito, mas não está nada bonito não é mesmo? Agora é com você vá em propriedades e veja o que você tem disponível para mudar ou então edite o HTML.
Até a próxima.
terça-feira, 10 de fevereiro de 2009
Artigo: Entendendo e Utilizando a Classe List
Qual a primeira forma que nos vem cabeça quando se fala em armazenar dados na memória?
Um vetor "arrays" seria a primeira resposta. Legal, mas se pararmos para pensar que um vetor é uma estrutura de dados estática. Isso nos deixa muito limitados, por exemplo.
Queremos armazenar um vetor com nomes de determinados alunos de uma sala de aula. Suponhamos que a sala tenha 20 alunos então teremos:
No código acima nós criamos um array nomeAlunos do tipo que armazena variáveis do tipo string com 20 posições.
Mas, e se pararmos para pensar;
- Será que a sala de aula vai ter sempre 20 alunos?
- E se eu quiser remover um aluno?
- E se eu quiser adicionar um aluno?
Ai logo de cara você responde, tem sim como aumentar o tamanho do meu array e também tem como remover e adicionar um novo aluno!
Concordo com você, mais até o fim deste artigo você irá concordar comigo que usar a List é muito mais fácil e sem falar divertido.
Vamos lá, outro exemplo. suponhamos que o array nomeAlunos esteja assim.
nomeAlunos [ 1 ] = "Joao";
nomeAlunos [ 2 ] = "Pedro";
nomeAlunos [ 3 ] = "Maria";
nomeAlunos [ 4 ] = "Helena";
Primeiro Problema: A Memória!
Nós temos um vetor de 20 posições e estamos utilizando somente 5 posições ou seja, temos 15 espaços alocados na memória atoa.
Segundo Problema: Deletar Aluno!
O João mudou de cidade, então tempos que deletar ele do nosso array. Deletando o João nosso array fica da seguinte forma:
nomeAlunos [ 0 ] = "José";
nomeAlunos [ 1 ] = ""; // espaço alocado atoa na memória
nomeAlunos [ 2 ] = "Pedro";
nomeAlunos [ 3 ] = "Maria";
nomeAlunos [ 4 ] = "Helena";
Caímos no Primeiro Problema, agora nos tempos 16 posições sendo alocadas na memória atoa.
Terceiro Problema: Adicionar novos alunos!
Logo de cara parece uma tarefa fácil, agora eu te pergunto: Em qual posição do array você vai adicionar o novo aluno?
Você logo me responde, adiciona na posição 1 para aproveitar o espaço alocado na memoria.
Correto, mas já imaginou o trabalho que você vai ter toda vez que precisar adicionar um novo elemento em um array, você vai ter que varrer todo o array em busca de um espaço livre.
Mas, e se eu adicionar em uma posição do array que já existe um aluno cadastrado?
O aluno cadastrado será sobreposto pelo novo aluno, você irá perder dados, e você não quer isso!
Quarto Problema: E se o array estiver lotado?
Você não pode simplesmente ir lá no array e mudar o tamanho do array para 22 posições. Pois ao fazer isso você estará criando um novo array de 22 posições e apagando todos os dados do array de 20.
Tem solução? Claro que tem, usando array:
Você copia os dados desse array de 20 para seu novo array de 22 posições. Concorda comigo que isso é um baita de um trabalho?
Você deve estar pensando, tudo tem solução usando no máximo uma estrutura de repetição, e pra que se preocupar com espaço vazio alocado na memoria já que hoje temos computadores com 4Gb de memoria.
É ai que está o X da questão, imagina se você precisar trazer centenas de dados de um Banco de Dados para trabalhar com eles durante o programar e depois ter que gravar esses dados novamente no Banco de Dados. Olha o trabalho que não vai ser gerenciar esse array. É ai que entra a classe List!
A classe List nada mais é que um vetor dinâmico. Vamos usar a classe List para o mesmo exemplo, olha que legal.
Vamos criar a List:
Utilizando a Classe List você pode adicionar ou apagar um aluno em qualquer lugar da List sem perder dados. Legal né? Vamos a pratica!
Vamos adicionar os alunos na List: Isso é feito através do método Add como pode ser observado.
nomeAlunos.Add ( "Jose");
nomeAlunos.Add ( "Joao");
nomeAlunos.Add ( "Pedro");
nomeAlunos.Add ( "Maria");
nomeAlunos.Add ( "Helena");
Reparou algo de novo, nós não temos mais o indexador quando adicionamos um novo elemento na lista.
Por padrão a List vai adicionando novos elementos sempre no final. Portando o funcionamento é igual ao de um array sem a necessidade de informar o indexador.
O indexador só vai aparacer em casos específicos como quando você quiser buscar, adicionar ou imprimir algum elemento da List.
Olha só com a List fica indexada:
nomeAlunos[ 0 ] armazena "Jose"
nomeAlunos[ 1 ] armazena "Joao"
nomeAlunos[ 2 ] armazena "Pedro"
nomeAlunos[ 3 ] armazena "Maria"
nomeAlunos[ 4 ] armazena "Helena"
Pratica: Vamos aos mesmos problemas do Array?
Primeiro Problema: A Memória!
Não temos mais espaços alocados sem necessidades na memória. Então, não temos mais o problema da memória.
Segundo Problema: Deletar Aluno!
O Joao mudou de cidade, então tempos que deletar ele do nossa List. Facil, deletamos o João e a List anda com os outros dados para o lado do menor indexador. Assim ela nao deixa espaço alocado sem uso na memória.
Na pratica para deletar somento o Joao utilizamos o metodo RemoveAt e passamos como parâmetro o indexador 1 que é onde o Joao está armazenado.
Depois de deletar Joao nossa List fica assim:
nomeAlunos[ 0 ] armazena "Jose"
nomeAlunos[ 1 ] armazena "Pedro"
nomeAlunos[ 2 ] armazena "Maria"
nomeAlunos[ 3 ] armazena "Helena"
Reparou o que aconteceu? Não tivemos espaços alocados sem necessidade na memória.
Terceiro Problema: Adicionar novos alunos!
Tarefa super fácil usando List:
Se você quiser apenas adicionar um novo aluno não é necessário especificar indexador, basta fazer o seguinte.
Facil né? Nossa List fica assim:
nomeAlunos[ 0 ] armazena "Jose"
nomeAlunos[ 1 ] armazena "Pedro"
nomeAlunos[ 2 ] armazena "Maria"
nomeAlunos[ 3 ] armazena "Helena"
nomeAlunos[ 4 ] armazena "Juca"
Tá bom, agora eu quero ver! Entrou um novo aluno, o Francisco. Mas eu quero adicionar na posição 3. Tem como?
Simples, fácil e rápido, quer ver?
Utilizamos o método Insert, e nele passamos o indexador e o nome do Francisco. Não falei que era simples, facil e rapido?
E nossa lista fica assim:
nomeAlunos[ 0 ] armazena "Jose"
nomeAlunos[ 1 ] armazena "Pedro"
nomeAlunos[ 2 ] armazena "Maria"
nomeAlunos[ 3 ] armazena "Francisco"
nomeAlunos[ 4 ] armazena "Helena"
nomeAlunos[ 5 ] armazena "Juca"
Percebeu o que a List fez? Ela realocou os elementos acima e o 3 inclusive para uma posição posterior e adicionou Francisco na posição 3.
Quarto Problema: E se o List estiver lotado?
A List nunca vai estar lotado, e nunca vai alocar espaço na memoria atoa.
O Generics permite que Classes, Métodos, Propriedades entre outras funcionalidades usem o tipo que você criou, ou seja, você não fica preso a tipos já programados como Int, String e Double.
Ficamos livres de boxing e unboxing, tá bom nem tando né, mais vai reduzir e muito as conversões.
Vamos a um exemplo prático!
public class Aluno {
public string Nome;
public int Idade;
}
Agora a única coisa que temos que fazer é criar um objeto da classe aluno, o resto é igual ao que foi explicado até aqui usando os Métodos da Classe List o Add, Insert e outros.
Vamos para pratica: Primeiro vamos criar nossa nova List
List<Aluno> listaAlunos = new List<Aluno> ( );
cadastraAluno.Nome = "Luiz";
Facil assim? Eu falei que era facil, rapido simples e divertido!
Ah, já estava esquecendo... Apartir de hoje você ainda vai usar array?
Artigo: Utilizando o GridView.
Sei que o Visual Studio possui um assistente, que facilita e muito as coisas, porém há casos que não há maneira de fazer pelo assitente, ou então o seu chefe não quer utilizá-lo, para que assim o seu código fique mais independente, nesse caso é que esta postagem terá efeito.
Pra começar inicie um novo Asp.Net Web Application.
Feito isso arraste um GridView para seu WebForm.
Abaixo o código da classe que preencherá o GridView:
public class DataAccess {
public string Nome { get; set; }
public string Sobrenome { get; set; }
public int Idade { get; set; }
public DataAccess( string n, string s, int i) {
this.Nome = n;
this.Sobrenome = s;
this.Idade = i;
}
}
Agora no codebehind do WebForm adicionarei o código para preencher um List
public partial class _Default : System.Web.UI.Page {
protected void Page_Load( object sender, EventArgs e ) {
List<DataAccess> lista = new List<DataAccess>( );
lista.Add( new DataAccess( "Zé", "Do Pulo", 40 ) );
lista.Add( new DataAccess( "João", "Sem Braço", 15 ) );
lista.Add( new DataAccess( "Maria", "Aparecida", 25 ) );
this.GridView1.DataSource = lista;
this.GridView1.DataBind( );
}
}
Feito isso o resultado será esse:
Agora suponhamos que você queira apenas mostrar o nome:
De um clique no seu GridView e escolhe Add New Column:
Na janela que abre, escolha BoundField para field type, coloque o nome que quiser para Header Text, porém o nome de Data Field terá que ser o mesmo da propriedade de sua classe, isso só funcionará com propriedade:
Para que o GridView não gere colunas automáticas de um clique no GridView, vá em propriedades e em AutoGenerateColumns coloque falso:
Pronto, agora seu resultado será esse:
Espero ter ajudado, até a próxima.
Microsoft disponibiliza download gratuito.
Para conseguir baixar basta ter um contrato do CIEE ativo. Esta é mais uma parceria entre a Microsoft e estudantes.