PUBLICIDADE
Este artigo tem nota
9

Autor

francke

Francke Peixoto

membro deste setembro de 2007

Tags

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Que área irá se desenvolver mais na web nos próximos anos?
sexta-feira, 28 de dezembro de 2007

Criando Controles personalizados no Asp.Net


Em nossa construção iremos usar os tipos de dados:
IEnumerable
http://msdn2.microsoft.com/en-us/library/system.collections.ienumerable.aspx

ITemplate
http://msdn2.microsoft.com/en-us/library/system.web.ui.itemplate(VS.71).aspx

INamingContainer
http://msdn2.microsoft.com/en-us/library/system.web.ui.inamingcontainer.aspx

Control
http://msdn2.microsoft.com/en-us/library/aa752040.aspx

IDataItemContainer
http://msdn2.microsoft.com/en-us/library/system.web.ui.idataitemcontainer.aspx

TemplateContainer
http://msdn2.microsoft.com/em-us/library/system.web.ui.templatecontainerattribute.aspx

Para ter uma descrição mais solida sobre esses dados consulte o MSDN.

A partir de agora iniciaremos a contrução de nosso controle.
Vamos criar uma classe chamada ClsTempleteItem
que herda de um Control, System.Web.UI.INamingContainer, IDataItemContainer
public class ClsTempleteItem : Control, System.Web.UI.INamingContainer, IDataItemContainer
{
private object dataitem;
public ClsTempleteItem(object dataitem)
{ this.dataitem = dataitem; }
}

Nosso controle -> MeuControle.ascx. [WebControl]
[MeuCotrole.ascx.cs] No .cs do WebControl adicionaremos nossos templates.
private ITemplate _Item;
private ITemplate _ItemAlternado;
private ITemplate _Cabecalho;
private ITemplate _Rodape;
private IEnumerable _MeuDataSource;
Usaremos também o [TemplateContainer(typeof(ClsTempleteItem))]
Note que o typeof é ClsTempleteItem
Este atributo é utilizado para fornecer o tipo de conteúdo do modelo.
[TemplateContainer(typeof(ClsTempleteItem))]
public ITemplate Cabecalho {
get { return _Cabecalho; }
set { _Cabecalho = value; }
} //o resto da implementação está no exemplo para download.
/* Nós poderíamos ter usado o RepeaterItem ao invés da classe ClsTempleteItem */
Depois de construir nosso conteúdo vamos implementar nosso próprio DataBind.
public override void DataBind(){
AddTemplateAsControl(Cabecalho, null);
IEnumerator IEdados = DataSource.GetEnumerator();
bool blnAlternar = false;
while (IEdados.MoveNext()){
if (blnAlternar && ItemAlternado != null)
AddTemplateAsControl(Item, IEdados.Current);
else if (ItemAlternado != null)
AddTemplateAsControl(ItemAlternado, IEdados.Current);
blnAlternar = !blnAlternar;
}
AddTemplateAsControl(Rodape, null);
base.DataBind();
}
private void AddTemplateAsControl(ITemplate template, object p){
ClsTempleteItem conteudo= new ClsTempleteItem(p);
/* A interface ITemplate possui um método chamado InstantiateIn,
* que é usado para tornar o modelo em
* conteúdo para um controle especifico.
*/
template.InstantiateIn(conteudo);
this.Controls.Add(conteudo);
}
Com nosso controle criado, vamos ao nosso aspx.
Em nosso aspx.cs iremos criar uma listagem com notas de Alunos para abastecer nosso controle.
public class Notas {
private string nome;
private float nota;
public string Nome {
get { return nome; }
set { nome = value; }
}
public float Nota{
get { return nota; }
set { Nota = value; }
}
public Notas(string nome, float nota){
this.nome = nome;
this.nota = nota;
}
}
Page_Load do aspx.cs
List<Notas> ls = new List<Notas>();
ls.Add(new Notas("Ana Maria", float.Parse("10,0")));
ls.Add(new Notas("Claudo Ralha", float.Parse("7,8")));
ls.Add(new Notas("Marcio Elias", float.Parse("9,8")));
ls.Add(new Notas("Francke Peixoto", float.Parse("3,9")));
Ao arrastar o controle para a página aspx. Teremos essa visão.



No source do controle poderemos usar a seguinte estrutura:



(parecido com o Repeater? ;-)
Agora é só fazer como sempre fazemos no Repeater.
No Page_Load :
MeuControle1.DataSource = ls;
MeuControle1.DataBind();
Ao gerar nossa página o resultado ficará parecido com o print abaixo:



Bom, agora já sabemos como criar nosso próprio controle, caso queira, você poderá implementar funcionalidades que o repeater ainda não tem como páginação,ordenação e etc..

/*
Uma versão em formato word com imagens está disponivel junto com o fonte para testes.
*/

ArquivoTipoTamanho 
Criando_Controles_personalizados_no_AspNet_ATUALIZADO.zipArquivo ZIP67,4 KbBaixar o Arquivo
Sim   Não   Este artigo foi útil para você?
NotaComentário
9
usertop comentou em 31/10/2009

Muito bom

Otimo tutorial so traz um pouco de dificuldade
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.