Conheça o Autor

francke
FRANCKE
PEIXOTO

membro deste setembro de 2007.

Palavras-Chave

Compartilhe e guarde
  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!
ASP.NET

Criando Controles personalizados no Asp.Net

sexta-feira, 28 de dezembro de 2007

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árioMembro
Ainda não foi enviado nenhum comentário.
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • 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 10 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.

Comente

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


Máximo de 30 caracteres

Máximo de 255 caracteres