Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 em código, 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 de fonte Parameter
de dados internos. Se nosso site tiver suporte para contas de usuário, talvez queiramos definir o parâmetro com base na ID de Usuário do visitante conectada 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 dispara seu evento Selecting. Em seguida, o método do objeto subjacente do ObjectDataSource é invocado. Após a conclusão, o evento Selecionado do ObjectDataSource é disparado (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 disparados antes e depois de seu método subjacente ser invocado (clique para exibir a imagem em tamanho real)
Neste tutorial, examinaremos a adição de um método ao nosso DAL e BLL que aceita um único parâmetro Month
de entrada, de tipo int
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 este nosso primeiro exemplo, precisamos adicionar um meio para recuperar os funcionários cujas HireDate
ocorreu em um mês específico. Para fornecer essa funcionalidade de acordo com nossa arquitetura, precisamos primeiro criar um método em EmployeesTableAdapter
que mapeará para a instrução SQL adequada. Para fazer isso, comece abrindo o Conjunto de Dados Tipado Northwind. Clique com o botão direito do EmployeesTableAdapter
rótulo e escolha Adicionar Consulta.
Figura 2: Adicionar uma nova consulta à 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
Declaração, a declaração padrão SELECT
para o EmployeesTableAdapter
já estará carregada. Basta adicionar na cláusula WHERE
: 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.
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 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 exibir a imagem em tamanho real)
Clique em Concluir para finalizar o assistente e voltar à área de design do Conjunto de Dados. Agora, o EmployeesTableAdapter
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 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 solicita o DAL para recuperar funcionários contratados antes de uma data especificada. Abra o EmployeesBLL.cs
arquivo e adicione o seguinte método:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
Assim como acontece com os nossos outros métodos nesta classe, GetEmployeesByHiredDateMonth(month)
simplesmente faz uma chamada ao DAL e retorna os resultados.
Etapa 3: Exibir 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 fonte de dados. Configure o ObjectDataSource para usar a classe EmployeesBLL
com SelectMethod
definido como GetEmployeesByHiredDateMonth(month)
.
Figura 6: Usar a EmployeesBLL
classe (Clique para exibir a imagem em tamanho real)
Figura 7: Selecione no 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 None padrão e clique em Concluir.
Deixe a origem do parâmetro definida como Nenhum
Figura 8: Deixe o conjunto de origem do parâmetro como Nenhum (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 do Selecting
ObjectDataSource. Para fazer isso, vá para o modo design e clique duas vezes no ObjectDataSource. Como alternativa, selecione o 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.
Figura 9: Clique no ícone de raio na janela de Propriedades para listar os eventos de um controle web
Ambas as 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]
, onde parameterName
é o valor do atributo Name
na tag <asp:Parameter>
(a coleção InputParameters
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 Selecting
manipulador de eventos:
protected void ObjectDataSource1_Selecting
(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
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 dá início à seção Filtragem e Cenários Master-Details, na qual examinaremos técnicas para permitir que o visitante filtre dados e aprofunde-se de um relatório mestre para um relatório detalhado.
Divirta-se programando!
Sobre o autor
Scott Mitchell, autor de sete livros 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 alcançado em mitchell@4GuysFromRolla.com.
Agradecimentos Especiais a
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? Se assim for, deixe-me uma linha em mitchell@4GuysFromRolla.com.