Share via


Desenvolvendo Controles Personalizados de Servidores Web Vinculados a Dados para ASP.NET 1,1

Controles de servidores Web ASP.NET vinculados a dados proveem uma interface de usuário (IU) para uma fonte de dados representando uma coleção de registros ou itens.Os controles de servidor Visão Geral sobre o Controle do Servidor Web GridView, Visão geral do controle DataList do servidor Web, e Visão geral controle de servidor da Web Repeater são exemplos de controles de servidor Web vinculados a dados.Para mais informações sobre controles vinculados a dados inclusos em ASP.NET, veja Visão geral de controle servidor Web com dados vinculados.

Este tópico apresenta as etapas necessárias para implementar uma versão mínima de um controle de servidor associado a dados compatível com a versão personalizada ASP.NET 1.1.Para obter mais informações sobre como criar controles ligados a dados personalizados no ASP.NET 2.0 consulte, Desenvolvendo Controles Personalizados de Servidores Web Vinculados a Dados para ASP.NET 2.0.Para mais informações sobre a arquitetura geral e implementações de controles personalizados., veja Desenvolvendo Controles Personalizados ASP.NET Server e Explicação Passo a Passo: Desenvolvendo e Usando um Controle de Servidor Personalizado.

Quando Criar um Controle Personalizado Vinculado a Dados

Antes de criando seu próprio controle limite a dados personalizado, consulte os recursos dos controles ligados a dados já fornecidos com o ASP.NET.Controles existentes podem atender às suas necessidades, ou você pode optar por criar um controle personalizado que estende um controle existente que já fornece muitos dos recursos que necessários.Para mais informações sobre controles vinculados a dados inclusos em ASP.NET, veja Visão geral de controle servidor Web com dados vinculados.

Aqui estão algumas razões pelas quais você pode decidir criar um controle personalizado vinculado a dados:

  • Suas necessidades particulares requerem uma IU personalizada, recursos personalizados de ordenação de dados, ou recursos personalizados de edição de dados que não estão disponíveis nos controles existentes vinculados a dados.

  • Você quer criar um controle personalizado vinculado a dados, que seja pré-compilado e possível de redistribuir.

  • Você quer extender recursos de um controle vinculado a dados já existente em ASP.NET.

  • Você quer criar um controle vinculado a dados com um designer personalizado que preenche suas necessidades específicas.

Funcionalidades Básicas do Controle Personalizado Vinculado a Dados

Ao derivar da classe Control ou WebControl, o controle associado a dados personalizado automaticamente herda muitos recursos internos, incluindo o seguinte:

  • Um modelo de vinculação de dados explícito que suporta expressões de ligação de dados.O modelo de vinculação de dados explícito ASP.NET executa associação de dados somente quando necessário, e não em cada postback.Após uma página realizar o primeiro requerimento de vinculação a dados, requereimentos subsequentes tentam obter os dados de um estado de exibição.Isso melhora a performance evitando a necessidade de reconectar-se à fonte de dados a cada requerimento.

  • Suporte a expressões vinculadas a dados, que habilitam os desenvolvedores de páginas a criar vínculos expostos, especialmente marcados entre propriedades do seu controle e a fonte de dados.Para obter mais informações sobre expressões de associação de dados, consulte Visão geral de expressões de ligação de dados.

Utilizando Recursos Disponíveis em Tempo de Criação

Há recursos disponíveis em tempos de criação para todos os controles de servidor Web que você possa querer considerar para seu controle personalizado vinculado a dados.Você pode criar uma classe desenvolvedora e modelos de controle para seu controle personalizado.Esses recursos são chamados quando você trabalha com o controle em uma superfície de design visual, como o modo design no Visual Studio.

Criar um controlador de designer pode aumentar significativamente a utilidade do seu controle personalizado em tempo de design através de uma interface de design que habilita os desenvolvedores de páginas a personalizar as propriedades de seu controle.Para obter uma visão geral de designers de controle do ASP.NET, consulte Visão Geral sobre os Designers de Controle do ASP.NET.Para exemplos, veja HierarchicalDataBoundControlDesigner e Demonstra Passo a passo: Criando um criador controle básico para um controle de servidor Web.

Criando um controlador de modelos, você provê aos desenvolvedores de páginas a flexibilidade de especificar os controles e as marcações que definem uma interface de usuário de controle.Para um exemplo de um controle de modelo personalizado, consulte Exemplo de Modelo de Controle de Servidor.

Implementar um controle associado a dados personalizado no ASP.NET

A tabela a seguir resume os requisitos que são específicos para implementar um controle de servidor associado a dados no ASP.NET 1.1.Após a tabela, você encontrará informações mais detalhadas sobre cada um dos requisitos de implementação.

Requisito

Descrição

Expõe uma propriedade DataSource.

Permite que um desenvolvedor de página use seu controle para especificar a fonte de dados a se vincular.

Substituir o método DataBind e criar a lógica para enumerar o objeto de fonte de dados associado.

Na lógica desse método:

  • O método OnDataBinding do controle de servidor é chamado para aumentar o evento DataBind.Isso permite que todas as expressões de ligação de dados que o desenvolvedor de página possam ser associadas com seu controle de servidor associado a dados para serem avaliadas.

  • Você deve fornecer todas as lógica para enumerar os objetos de fonte de dados aqui.

  • Todos os controles filho são criados para representar visualmente a fonte de dados.

Criar uma hierarquia de controle filho, substituindo o método CreateChildControls

No postback, recriar controles filhos e vinculá-los a dados armazenados em estado de exibição durante uma chamada DataBind anterior.

Observação:

Considere a possibilidade de criar um método único auxiliar a ser chamado por DataBind e os métodos CreateChildControls para criar a hierarquia de controle filho.Por exemplo, o método auxiliar que cria a hierarquia de controle filho pode aceitar um valor Boolean, que indica que os dados são de fonte acoplada ou de estado de exibição.Esse padrão mantém a criação da hierarquia de controle filho do controle em um caminho comum de código.Para obter um exemplo deste padrão, consulte Demonstra Passo a passo: Criando um controle de Web do ASP.NET personalizados ligados a dados para ASP.NET 1,1.

Expor uma propriedade DataSource

Um controle associado a dados ASP.NET 1.1 derivado de Control ou WebControl deve expor uma propriedade DataSource para permitir ao desenvolvedor de página selecionar a coleção de dados que seu controle de servidor irá se vincular.Em tempo de execução, o controle associado a dados personalizado enumera através da coleção de dados atribuída à propriedade DataSource quando ele cria e vincula elementos de interface do usuário para representar estes dados.

Um controle de servidor associado a dados pode se vincular a esses tipos:

O exemplo de código a seguir mostra como expor uma propriedade DataSource de um controle associado a dados.O tipo DataSource é declarado como tipo IEnumerable.

<Category("Data"), DefaultValue(""), Description("An exposed data source: A public member of type IEnumerable to bind to such as an Array, ArrayList or Hashtable.")> _
Public Overridable Property DataSource() As IEnumerable
    Get
        Return _dataSource
    End Get
    Set(ByVal value As IEnumerable)
        If TypeOf value Is IEnumerable OrElse value Is Nothing Then
            _dataSource = value
        Else
            Throw New ArgumentException()
        End If
    End Set
End Property
[
Category("Data"),
DefaultValue(""),
Description("An exposed data source: A public member of type IEnumerable to bind to such as an Array, ArrayList or Hashtable.")
]
public virtual IEnumerable DataSource
{
    get
    {
        return _dataSource;
    }
    set
    {
        if ((value is IEnumerable) || (value == null))
        {
            _dataSource = value;
        }
        else
        {
            throw new ArgumentException();
        }
    }
}

Este exemplo inicia com atributos de metadados, como [Category],[DefaultValue] e [Description], que fornecem informações usadas por ferramentas de design, o analisador de página ASP.NET, o tempo de execução ASP.NET e a Common Language Runtime (CLR).O BindableAttribute notifica um designer visual que o navegador de propriedades pode exibir propriedades vinculáveis do controle em uma caixa de diálogo.(Por exemplo, em Visual Studio, propriedades vinculáveis são exibidas na caixa de diálogo de DataBindings.) O CategoryAttribute especifica como categorizar a propriedade no navegador de propriedade do designer visual.Para obter mais informações sobre os atributos de metadados, incluindo os usados nesse exemplo, consulte Atributos Metadata para Controles de Servidor Personalizados.

O assessor de configuração para a propriedade DataSource verifica o valor para definir tanto null ou do tipo IEnumerable.Portanto, nesse exemplo o desenvolvedor de página pode vincular a qualquer tipo de objeto IEnumerable, como um Array, ArrayList, ou Hashtable.Como alternativa, o desenvolvedor pode definir o DataSource como null até que uma fonte de dados adequada do tipo IEnumerable esteja disponível.

Observação:

Se você desejar que seu controle de servidor associado a dados personalizado seja possível se vincular a qualquer um tipo de dados IEnumerable ou IListSource, você pode declarar a propriedade DataSource como o tipo genérico Object.Nesse caso, o assessor set que expõe sua propriedade DataSource deve verificar o tipo de objeto passado para ela e em seguida, implementar qualquer um dos IEnumerable ou IListSource.

Substituindo o método DataBind e enumerando a fonte de dados associada

Fornecer uma substituir à base DataBind método no seu controle personalizado para permitir que duas tarefas para ser executada: enumerar através da coleta de dados vinculados e criar a hierarquia de controle filho que representarão dados.A lista a seguir resume tarefas que você deve executar no método DataBind substituído:

  • Chamar o método base OnDataBinding do seu controle personalizado.

  • Desmarque os controles filho existentes.

  • Desmarque todos os estado de exibição de controles filhos.

  • Controlar o estado de modo que as alterações durante a associação de dados sejam persistentes no estado de exibição.

  • Crie a hierarquia de controle filho.

  • Defina a propriedade ChildControlsCreated como true.

Começar com invocação do método base OnDataBinding do controle a partir de dentro do método DataBind substituído no seu controle.Chamar o método base OnDataBinding do seu controle faz com que todas as expressões de ligação de dados para o controle sejam avaliadas.O exemplo de código a seguir mostra como chamar o método OnDataBinding em um controle de servidor associado a dados como a primeira tarefa dentro de seu método DataBind substituído.

public override void DataBind()
{
    base.OnDataBinding(EventArgs.Empty);
}
Public Overrides Sub DataBind()
    MyBase.OnDataBinding(EventArgs.Empty)
End Sub

Em seguida, desmarque os controles filho existente.Desde que a hierarquia de controle filho deva ser recriada com cada postback com base nos dados a serem vinculados, quaisquer controles filho existentes devem ser limpos pela invocação do método Clear herdado do controle, conforme mostrado na exemplo de código a seguir.

public override void DataBind()
{
    base.OnDataBinding(EventArgs.Empty);
    Controls.Clear();
}
Public Overrides Sub DataBind()
    MyBase.OnDataBinding(EventArgs.Empty)
    Controls.Clear()
End Sub

Novos controles filho serão criados para representar dados recém-acoplados, portanto, qualquer estado de exibição para controles filho existentes devem ser descartados.Desmarque estados de modo de exibição de todos os controles filho pela invocação do método ClearChildViewState herdado do controle.

Após você tiver desmarcado o estado de exibição para os controles filho existentes, inicie o ratreamento do estado de exibição do controle por chamada ao herdado TrackViewState do controle, que cuida do rastreamento de estado de exibição para você.O ratreamento do estado do controle é iniciado antes de criar a hierarquia de controle filho para que as alterações a hierarquia de controle filho feitas durante a associação de dados sejam persistentes no estado de exibição.Desde que um desenvolvedor de página possa chamar DataBind durante a página do evento PreInit você não pode depender da sua classe base do controle para rastrear o estado de exibição que ocorre após esse estágio no ciclo de vida da página.Nesse caso, o rastreamento de estado de exibição para o controle ocorreria muito tarde no processo.

O exemplo de código a seguir ilustra um controle de servidor associado a dados chamando o método TrackViewState.

public override void DataBind() 
{
    TrackViewState();
}
Public Overrides Sub DataBind()
    TrackViewState()
End Sub

Em seguida, crie a hierarquia de controle filho.A hierarquia de controle filho visualmente representa a fonte de dados que seu controle associado a dados personalizado está vinculado e é criada quando o métodos substituídos DataBind ou CreateChildControls de seu controle personalizado são chamados por classe base do seu controle.Quando o DataBind substituído do controle é chamado por classe base do controle, a hierarquia filho do seu controle é criada com base em fonte de dados ligada.Quando o método CreateChildControls substituído do controle é chamado pela classe base, a hierarquia de controle filho é criada com base nos dados salvos em estado de exibição.

A criação da hierarquia de controle filho é acionada invocando o método DataBind do controle.O controle enumera através dos dados fornecidos pela propriedade DataSource exposta e instancia um novo controle filho para representar cada item de dados.Por exemplo, se a fonte de dados for uma matriz de sequências de caracteres deve ser vinculada à propriedade Text de controles de Button, fazer uma iteração através da matriz, criar um novo controle Button com sua propriedade Text atribuída ao item de dados repetido representado como uma sequência de caracteres.

Depois de criar a hierarquia de controle filho, defina a propriedade ChildControlsCreated como true para indicar que o método CreateChildControls não deve ser chamado pela classe base.

O exemplo de código a seguir ilustra um controle de servidor associado a dados definindo sua propriedade ChildControlsCreated como true.

public override void DataBind()
{
     ChildControlsCreated = true;
} 
Public Overrides Sub DataBind()
    ChildControlsCreated = True
End Sub

Sua classe de controle associado a dados personalizado deve fornecer um método CreateChildControls substituído no qual o controle recria sua hierarquia de controle filho e permite que estado de exibição salvo seja aplicado.(Estado de exibição salvo é controlado durante a chamada mais recente para o controle do método DataBind.)

A lista a seguir resume tarefas que você deve executar no método CreateChildControls substituído:

  • Desmarque os controles filho existentes.

  • Crie a hierarquia de controle filho se o estado de exibição está disponível.

Antes de recriar a hierarquia de controle filho, você deve desmarcar quaisquer objetos de controle filho existentes.Isso é feito por invocar o controle do método Clear.

O exemplo de código a seguir ilustra um controle de servidor associado a dados chamando o método Clear.

public override void CreateChildControls()
{
    Controls.Clear();
}

Como a última etapa, crie a hierarquia de controle filho.O método CreateChildControls deve recriar a hierarquia de controle filho se há estado de exibição disponível.Desde que o mesmo número e tipos de controles filho sejam criados na mesma hierarquia, o estado de exibição salvo será automaticamente aplicado aos controles filho.O controle pode salvar as informações que ele precise recriar o mesmo número, tipo e hierarquia de controles filho no seu controle da propriedade ViewState.Para obter mais informações sobre como salvar estado de exibição de controle, consulte ViewState.Para um exemplo de código completo demonstrando a criação da hierarquia de controle filho em um controle associado a dados personalizado, consulte Demonstra Passo a passo: Criando um controle de Web do ASP.NET personalizados ligados a dados para ASP.NET 1,1.

Contruindo Seu Próprio Controle de Servidor

Para informações sobre contrução do seu controle personalizado de servidor Web vinculado a dados e uso na página Web, veja Construindo os Exemplos de Controle de Servidor Personalizado.

Observação:

Você deve adicionar uma referência ao Conjunto de Módulos (Assembly) System.Design para incluí-lo na sua compilação.

Consulte também

Tarefas

Demonstra Passo a passo: Criando um controle de Web do ASP.NET personalizados ligados a dados para ASP.NET 1,1

Explicação Passo a Passo: Desenvolvendo e Usando um Controle de Servidor Personalizado

Conceitos

Visão geral de controle servidor Web com dados vinculados

Atributos Metadata para Controles de Servidor Personalizados

Visão Geral sobre os Designers de Controle do ASP.NET

Referência

HierarchicalDataBoundControlDesigner

Outros recursos

Desenvolvendo Controles Personalizados ASP.NET Server