none
Melhor prática para criar propriedade em controle ASCX.

    Pergunta

  • Pessoal,

    Estou desenvolvendo um controle ASCX, e dentro dele tenho um GridView onde seu DataSource pode ser especificado pelo desenvolvedor.
    Para isto criei uma propriedade no ASCX chamado de DataSource do tipo List<Usuario>. Minha dúvida é se na criação do Set da propriedade DataSource do ASCX eu devo acessar a propriedade DataSource do GridView diretamente ou acessar uma variavel privada, criando o encapsulamento?

    Exemplo da propriedade DataSource criado no ASCX acessando diretamente o GridView dentro dele:

    public List<Usuario> DataSource
        {
            get { return UsuarioGridView.dataSource as List<Usuario>; }
            set { UsuarioGridView.DataSource = value; }
        }
    Exemplo da propriedade DataSource criado no ASCX acessando uma variável privada:
    public List<Produto> DataSource
        {
            get { return this.dataSource; }
            set { this.dataSource = value; }
        }
    Em seguida eu faço um override do método DataBind() do ASCX para dar um bind no GridView.

    Qual das opções vcs utilizariam?

    Isto vale para outros controle na pagina também, tipo o valor Text das Labels dentro do ASCX também.  Devo acessá-las diretamente no SET ou devo criar propriedades privadas e fazer override das funções?

    Obrigado pela ajuda!
    domingo, 28 de junho de 2009 14:59

Respostas

  • Fábio,

    acredito que não haja problema em sua propriedade definir diretamente o DataSource do GridView. O importante é quem vai consumir o ASCX não acessar o GridView diretamente. Como você já está encapsulando em uma propriedade, acho já ser o suficiente. Além do mais, se no futuro você precisar mudar para a segunda alternativa, será transparente para quem usa o ASCX, já que você fará uma alteração na forma como a propriedade trabalha.
    Ricardo Oneda Acesse o blog de Ricardo Oneda Acesse o perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Fábio Moggi segunda-feira, 29 de junho de 2009 11:45
    domingo, 28 de junho de 2009 18:26
  • Fabio,

    um ASCX é um "pedaço" de página (por ex, um cabeçalho que se repete em toda página). Já um Server Control, é um controle, como um TextBox ou DropDown.
    Ricardo Oneda Blog de Ricardo Oneda Perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Fábio Moggi quarta-feira, 1 de julho de 2009 14:27
    terça-feira, 30 de junho de 2009 11:45

Todas as Respostas

  • Fábio,

    acredito que não haja problema em sua propriedade definir diretamente o DataSource do GridView. O importante é quem vai consumir o ASCX não acessar o GridView diretamente. Como você já está encapsulando em uma propriedade, acho já ser o suficiente. Além do mais, se no futuro você precisar mudar para a segunda alternativa, será transparente para quem usa o ASCX, já que você fará uma alteração na forma como a propriedade trabalha.
    Ricardo Oneda Acesse o blog de Ricardo Oneda Acesse o perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Fábio Moggi segunda-feira, 29 de junho de 2009 11:45
    domingo, 28 de junho de 2009 18:26
  • Olá Ricardo!

    Obrigado pela ajuda.
    Estou criando uma série de componentes que serão reutilizados em outros projetos e gostaria de saber qual é a diferença entre criar um ASCX e um ServerControl?
    Pelo que andei pesquisando, a complexidade de um Server Control é muito grande, e é bem trabalhoso também.

    O que vc recomedaria neste caso?

    segunda-feira, 29 de junho de 2009 11:45
  • Fabio,

    um ASCX é um "pedaço" de página (por ex, um cabeçalho que se repete em toda página). Já um Server Control, é um controle, como um TextBox ou DropDown.
    Ricardo Oneda Blog de Ricardo Oneda Perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Fábio Moggi quarta-feira, 1 de julho de 2009 14:27
    terça-feira, 30 de junho de 2009 11:45