Configurar programaticamente os valores do parâmetro ObjectDataSource (VB)
por Scott Mitchell
Neste tutorial, examinaremos a adição de um método à nossa DAL e BLL que aceita um único parâmetro de entrada e retorna dados. O exemplo definirá esse parâmetro programaticamente.
Introdução
Como vimos no tutorial anterior, várias opções estão disponíveis para passar valores de parâmetro declarativamente para os métodos do ObjectDataSource. Se o valor do parâmetro for codificado, vier de um controle Web na página ou estiver em qualquer outra fonte legível por um objeto de fonte Parameter
de dados, por exemplo, esse valor poderá ser associado ao parâmetro de entrada sem escrever uma linha de código.
No entanto, pode haver momentos em que o valor do parâmetro vem de alguma fonte ainda não contabilizado por um dos objetos internos da fonte Parameter
de dados. Se nosso site deu suporte a contas de usuário, talvez queiramos definir o parâmetro com base na ID de Usuário do visitante conectado no momento. Ou talvez seja necessário personalizar o valor do parâmetro antes de enviá-lo ao método do objeto subjacente objectDataSource.
Sempre que o método objectDataSource é Select
invocado, o ObjectDataSource primeiro gera seu evento Selecting. O método do objeto subjacente objectDataSource é invocado. Após a conclusão do evento Selected do ObjectDataSource (a Figura 1 ilustra essa sequência de eventos). Os valores de parâmetro passados para o método do objeto subjacente objectDataSource podem ser definidos ou personalizados em um manipulador de eventos para o Selecting
evento.
Figura 1: Os Eventos e Selecting
ObjectDataSource Selected
são disparados antes e depois que o método do objeto subjacente é invocado (clique para exibir a imagem em tamanho real)
Neste tutorial, examinaremos a adição de um método à nossa DAL e BLL que aceita um único parâmetro Month
de entrada , do tipo Integer
e retorna um EmployeesDataTable
objeto preenchido com os funcionários que têm seu aniversário de contratação no especificado Month
. Nosso exemplo definirá esse parâmetro programaticamente com base no mês atual, mostrando uma lista de "Aniversários de funcionários neste mês".
Vamos começar!
Etapa 1: Adicionar um método aEmployeesTableAdapter
Para nosso primeiro exemplo, precisamos adicionar um meio para recuperar os funcionários que HireDate
ocorreram em um mês especificado. Para fornecer essa funcionalidade de acordo com nossa arquitetura, precisamos primeiro criar um método no EmployeesTableAdapter
que mapeia para a instrução SQL adequada. Para fazer isso, comece abrindo o Conjunto de Dados Tipado northwind. Clique com o botão direito do mouse no EmployeesTableAdapter
rótulo e escolha Adicionar Consulta.
Figura 2: Adicionar uma nova consulta ao EmployeesTableAdapter
(Clique para exibir a imagem em tamanho real)
Escolha adicionar uma instrução SQL que retorna linhas. Quando você chegar à tela Especificar uma SELECT
Instrução, a instrução padrão SELECT
do EmployeesTableAdapter
já será carregada. Basta adicionar na WHERE
cláusula: WHERE DATEPART(m, HireDate) = @Month
. DATEPART é uma função T-SQL que retorna uma determinada parte de data de um datetime
tipo; nesse caso, estamos usando DATEPART
para retornar o mês da HireDate
coluna.
parâmetro @HiredBeforeDate " />
Figura 3: retornar somente as linhas em que a HireDate
coluna é menor ou igual ao @HiredBeforeDate
parâmetro (clique para exibir a imagem em tamanho real)
Por fim, altere os nomes de FillBy
método e GetDataBy
para FillByHiredDateMonth
e GetEmployeesByHiredDateMonth
, respectivamente.
Figura 4: escolha nomes de método mais apropriados do que FillBy
e GetDataBy
(clique para exibir imagem em tamanho real)
Clique em Concluir para concluir o assistente e retornar à superfície de design do Conjunto de Dados. O EmployeesTableAdapter
agora deve incluir um novo conjunto de métodos para acessar funcionários contratados em um mês especificado.
Figura 5: Os novos métodos aparecem na superfície de design do Conjunto de Dados (clique para exibir a imagem em tamanho real)
Etapa 2: Adicionar oGetEmployeesByHiredDateMonth(month)
método à camada de lógica de negócios
Como nossa arquitetura de aplicativo usa uma camada separada para a lógica de negócios e a lógica de acesso a dados, precisamos adicionar um método à nossa BLL que chama o DAL para recuperar funcionários contratados antes de uma data especificada. Abra o EmployeesBLL.vb
arquivo e adicione o seguinte método:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Assim como acontece com nossos outros métodos nessa classe, GetEmployeesByHiredDateMonth(month)
basta chamar para o DAL e retornar os resultados.
Etapa 3: Exibindo funcionários cujo aniversário de contratação é este mês
Nossa etapa final para este exemplo é exibir os funcionários cujo aniversário de contratação é este mês. Comece adicionando um GridView à ProgrammaticParams.aspx
página na BasicReporting
pasta e adicione um novo ObjectDataSource como sua fonte de dados. Configure o ObjectDataSource para usar a EmployeesBLL
classe com o SelectMethod
definido como GetEmployeesByHiredDateMonth(month)
.
Figura 6: Usar a EmployeesBLL
classe (Clique para exibir a imagem em tamanho real)
Figura 7: Selecione Do GetEmployeesByHiredDateMonth(month)
método (Clique para exibir a imagem em tamanho real)
A tela final nos pede para fornecer a origem month
do valor do parâmetro. Como definiremos esse valor programaticamente, deixe a origem do parâmetro definida como a opção padrão Nenhum e clique em Concluir.
Figura 8: Deixe o parâmetro Source Set como None (Clique para exibir a imagem em tamanho real)
Isso criará um Parameter
objeto na coleção objectDataSource SelectParameters
que não tem um valor especificado.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Para definir esse valor programaticamente, precisamos criar um manipulador de eventos para o evento objectDataSource Selecting
. Para fazer isso, acesse a exibição Design e clique duas vezes em ObjectDataSource. Como alternativa, selecione ObjectDataSource, vá para o janela Propriedades e clique no ícone de raio. Em seguida, clique duas vezes na caixa de texto ao lado do Selecting
evento ou digite o nome do manipulador de eventos que você deseja usar. Como uma terceira opção, você pode criar o manipulador de eventos selecionando ObjectDataSource e seu Selecting
evento nas duas listas suspensas na parte superior da classe code-behind da página.
Figura 9: Clique no ícone relâmpago na janela Propriedades para listar os eventos de um controle da Web
Todas as três abordagens adicionam um novo manipulador de eventos para o evento ObjectDataSource Selecting
à classe code-behind da página. Nesse manipulador de eventos, podemos ler e gravar nos valores de parâmetro usando e.InputParameters(parameterName)
, em que parameterName
é o valor do Name
atributo na <asp:Parameter>
marca (a InputParameters
coleção também pode ser indexada ordinicamente, como em e.InputParameters(index)
). Para definir o month
parâmetro como o mês atual, adicione o seguinte ao Selecting
manipulador de eventos:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Ao visitar esta página por meio de um navegador, podemos ver que apenas um funcionário foi contratado este mês (março) Laura Callahan, que está na empresa desde 1994.
Figura 10: Os funcionários cujos aniversários deste mês são mostrados (clique para exibir a imagem em tamanho real)
Resumo
Embora os valores dos parâmetros do ObjectDataSource possam normalmente ser definidos declarativamente, sem exigir uma linha de código, é fácil definir os valores de parâmetro programaticamente. Tudo o que precisamos fazer é criar um manipulador de eventos para o evento objectDataSource Selecting
, que é acionado antes que o método do objeto subjacente seja invocado e defina manualmente os valores para um ou mais parâmetros por meio da InputParameters
coleção.
Este tutorial conclui a seção Relatório Básico. O próximo tutorial inicia a seção Filtragem e cenários de Master-Details, na qual examinaremos técnicas para permitir que o visitante filtre dados e faça drill down de um relatório de master em um relatório de detalhes.
Programação feliz!
Sobre o autor
Scott Mitchell, autor de sete livros do ASP/ASP.NET e fundador da 4GuysFromRolla.com, trabalha com tecnologias da Microsoft Web desde 1998. Scott trabalha como consultor independente, treinador e escritor. Seu último livro é Sams Teach Yourself ASP.NET 2.0 em 24 Horas. Ele pode ser contatado em mitchell@4GuysFromRolla.com. ou através de seu blog, que pode ser encontrado em http://ScottOnWriting.NET.
Agradecimentos Especiais
Esta série de tutoriais foi revisada por muitos revisores úteis. O revisor principal deste tutorial foi Hilton Giesenow. Interessado em revisar meus próximos artigos do MSDN? Nesse caso, solte-me uma linha em mitchell@4GuysFromRolla.com.