Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
por Scott Mitchell
Neste tutorial, veremos como adicionar um método ao nosso 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 declarativamente valores de parâmetro para os métodos do ObjectDataSource. Se o valor do parâmetro for codificado, vier de um controle da 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 vinculado ao parâmetro de entrada sem escrever uma linha de código.
Pode haver momentos, no entanto, em que o valor do parâmetro vem de alguma fonte ainda não contabilizada por um dos objetos de fonte Parameter de dados internos. Se o nosso site suportar contas de usuário, podemos querer definir o parâmetro com base no ID de usuário do visitante conectado no momento. Ou talvez seja necessário personalizar o valor do parâmetro antes de enviá-lo para o método do objeto subjacente do ObjectDataSource.
Sempre que o método Select do ObjectDataSource é invocado, o ObjectDataSource primeiro gera o seu evento Selecting. O método do objeto subjacente do ObjectDataSource é então invocado. Quando isso for concluído, o evento Selected do ObjectDataSource será acionado (a Figura 1 ilustra essa sequência de eventos). Os valores de parâmetro passados para o método do objeto subjacente do ObjectDataSource podem ser definidos ou personalizados em um manipulador de eventos para o Selecting evento.
Figura 1: Os eventos Selected e Selecting do ObjectDataSource são acionados antes e depois que o método do objeto subjacente é invocado (Clique para ver a imagem em tamanho real)
Neste tutorial, veremos como adicionar um método ao nosso DAL e BLL que aceita um único parâmetro Monthde 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: Adicionando um método aEmployeesTableAdapter
Para o nosso primeiro exemplo, precisamos adicionar um meio para recuperar os funcionários cujo HireDate ocorreu em um mês especificado. Para fornecer esta funcionalidade de acordo com a nossa arquitetura, primeiro precisamos criar um método em EmployeesTableAdapter que mapeie para a instrução SQL adequada. Para fazer isso, comece abrindo o Northwind Typed DataSet. Clique com o botão direito do rato no rótulo EmployeesTableAdapter e escolha Adicionar consulta.
Figura 2: Adicionar uma nova consulta ao EmployeesTableAdapter (Clique para visualizar a imagem em tamanho real)
Escolha adicionar uma instrução SQL que retorna linhas. Quando chegares ao ecrã Especificar uma instrução SELECT, a instrução padrão SELECT para o EmployeesTableAdapter já estará carregada. Basta acrescentar a cláusula WHERE: WHERE DATEPART(m, HireDate) = @Month.
DATEPART é uma função T-SQL que retorna uma parte de data específica de um datetime tipo, neste caso estamos usando DATEPART para retornar o mês da HireDate coluna.
Figura 3: Retornar somente as linhas em que a HireDate coluna é menor ou igual ao parâmetro (@HiredBeforeDate imagem em tamanho real)
Finalmente, altere os nomes dos métodos FillBy e GetDataBy para FillByHiredDateMonth e GetEmployeesByHiredDateMonth, respectivamente.
Figura 4: Escolha nomes de método mais apropriados do que FillBy e GetDataBy (Clique para visualizar a imagem em tamanho real)
Clique em Concluir para concluir o assistente e retornar à superfície de design do DataSet. O EmployeesTableAdapter deve agora incluir um novo conjunto de métodos para acessar funcionários contratados em um mês específico.
Figura 5: Os novos métodos aparecem na superfície de design do DataSet (Clique para visualizar a imagem em tamanho real)
Etapa 2: Adicionando oGetEmployeesByHiredDateMonth(month)método à camada de lógica de negócios
Como nossa arquitetura de aplicativos 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 chame a 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
Tal como acontece com os outros métodos nesta classe, GetEmployeesByHiredDateMonth(month) faz uma chamada para o DAL e retorna os resultados.
Etapa 3: Exibindo funcionários cujo aniversário de contratação é este mês
Nosso passo 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 classe EmployeesBLL com SelectMethod definido para GetEmployeesByHiredDateMonth(month).
Figura 6: Usar a EmployeesBLL classe (Clique para visualizar a imagem em tamanho real)
Figura 7: Selecione pelo método (GetEmployeesByHiredDateMonth(month)Clique para visualizar a imagem em tamanho real)
A tela final nos pede para fornecer a fonte do valor do month 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 a fonte do parâmetro definida como Nenhum (Clique para visualizar a imagem em tamanho real)
Isso criará um Parameter objeto na coleção de SelectParameters ObjectDataSource 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 do Selecting ObjectDataSource. Para fazer isso, vá para a visualização Design e clique duas vezes em ObjectDataSource. Como alternativa, selecione ObjectDataSource, vá para a 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 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 de raio 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. Neste manipulador de eventos, podemos ler e gravar nos valores dos parâmetros usando e.InputParameters(parameterName), onde parameterName é o Name valor do atributo na <asp:Parameter> tag (a InputParameters coleção também pode ser indexada ordinalmente, como em e.InputParameters(index)). Para definir o month parâmetro para o mês atual, adicione o seguinte ao manipulador de Selecting 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 através de um navegador podemos ver que apenas uma funcionária foi contratada este mês (março) Laura Callahan, que está na empresa desde 1994.
Figura 10: Os funcionários cujos aniversários este mês são mostrados (Clique para ver a imagem em tamanho real)
Resumo
Embora os valores dos parâmetros de ObjectDataSource normalmente possam ser definidos declarativamente, sem exigir uma linha de código, é fácil definir os valores dos parâmetros programaticamente. Tudo o que precisamos fazer é criar um manipulador de eventos para o evento do Selecting ObjectDataSource, que é acionado antes que o método do objeto subjacente seja invocado, e definir manualmente os valores para um ou mais parâmetros por meio da InputParameters coleção.
Este tutorial conclui a seção Relatórios básicos. O próximo tutorial inicia a seção Filtragem e Master-Details Cenários, na qual examinaremos técnicas para permitir que o visitante filtre dados e explore detalhadamente, a partir de um relatório principal até um relatório detalhado.
Feliz Programação!
Sobre o Autor
Scott Mitchell, autor de sete livros sobre ASP/ASP.NET e fundador da 4GuysFromRolla.com, trabalha com tecnologias Web da Microsoft desde 1998. Scott trabalha como consultor, formador e escritor independente. Seu último livro é Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Ele pode ser contatado em mitchell@4GuysFromRolla.com.
Um agradecimento especial a
Esta série de tutoriais foi revisada por muitos revisores úteis. O revisor principal deste tutorial foi Hilton Giesenow. Interessado em rever meus próximos artigos do MSDN? Se for o caso, envie-me uma mensagem para mitchell@4GuysFromRolla.com.
@HiredBeforeDate " />