Parâmetro customizado em controles DataSource


Há algum tempo eu falei aqui sobre controles Data Sources (ObjectDataSource, SqlDataSource, etc.). Esses controles possuem tipos de parametros pré-definidos, como é o caso do CookieParameter, ControlParameter, SessionParameter, etc..

Só que há situações em que precisamos customizar tais tipos de parametros, ou melhor, extrair a informação de um local em que os parametros pré-definidos não nos ajudam. Para este cenário, podemos criar um parametro customizado, herdando da classe base Parameter, como é mostrado abaixo:

public class UserNameParameter : Parameter
{
    public UserNameParameter() { }

    //outras implementações//membros

    protected override object Evaluate(HttpContext context, Control control)
    {
        if (context == null || !context.User.Identity.IsAuthenticated)
            return null;

        return context.User.Identity.Name;
    }
}

Com esse controle criado, podemos utilizá-lo no interior de um controle ObjectDataSource, como podemos visualizar no trecho de código abaixo:

<%@ Register TagPrefix=”ia” Assembly=”ClassLibrary1″ Namespace=”ClassLibrary1″ %>

<asp:ObjectDataSource ID=”ObjectDataSource1″ runat=”server”
    SelectMethod=”RecuperarUsuarios” TypeName=”ColecaoDeUsuarios”>
    <SelectParameters>
        <ia:UserNameParameter Name=”nome” />
    </SelectParameters>
</asp:ObjectDataSource>

//Classe ColecaoDeUsuarios:

public List<Usuario> RecuperarUsuarios(string nome) { }

É importante lembrar que o atributo Name é herdado da classe Parameter e voce deverá definí-lo com o nome do parametro especificado no método RecuperarUsuarios (método de Select). Para finalizar, voce não precisa se restringir as propriedades existentes na classe Parameter; voce pode estar criando as tuas próprias propriedades (se preocupando em guardar as informações no ViewState) e permitindo que o usuário (outro desenvolvedor) atributo valor para ela durante a configuração do controle Data Source.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s