Introdução:
Este artigo é um link fornecido por Kanyuanzi anteontem. Esqueci a quem pertence, só me lembro que o endereço http://www.codeproject.com/aspnet/ReportViewer.asp foi postado e então foi. disse isso porque por algum motivo não foi traduzido. Mais tarde, dei uma olhada e isso foi útil para mim, porque alguém na empresa estava trabalhando em coisas de RS, e o departamento de optoeletrônica lá embaixo também tinha necessidades de BS. Eu já sabia disso há muito tempo, mas nunca tive. hora de estudá-lo, então encontrei este artigo. Estudei-o cuidadosamente a tarde toda, traduzi-o primeiro e depois adicionei alguns insights.
Durante o processo de tradução, tentei localizá-lo o máximo possível, mas mantive o significado do autor original. Se houver alguma imprecisão na tradução, por favor, critique-me e corrija-me.
Existem muitos modos de serviço (Modo Servidor) do SqlServer RS na Internet, e realmente passei muito tempo estudando o modo local (Modo Local), principalmente quando há chamadas de parâmetros.
A razão pela qual o modo local é usado em vez do modo servidor é porque toda vez que o cliente no modo de serviço solicita um relatório, o servidor deve organizar os dados em um relatório e depois enviá-lo ao cliente. Embora seja mais seguro, o relatório enorme o fará. a transmissão do servidor para o navegador reduz seu desempenho.
Portanto, este artigo descreve como organizar um relatório e lê-lo usando o controle ReportViewer do ASP.NET2.0. Aqui escolhemos o modo local e usamos um procedimento armazenado com parâmetros. O que eu uso é ASP.NET2.0, VisualStudio2005 e SQLServer2005 mais Application Block. Se você não tiver a ferramenta Microsoft Application Block, substitua o código que chama o procedimento armazenado por meio do SQL Helper no exemplo pelo SQL Command.
Aqui escolhemos o banco de dados Northwind. Nosso exemplo mostra ao usuário selecionar o nome do produto na lista suspensa e, em seguida, filtrar as informações no relatório.
A primeira etapa é criar um procedimento armazenadoALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
com parâmetros
AS
SELECT Categorias.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Categorias INNER JOIN Produtos ON
Categorias.CategoryID = Produtos . CategoryID
WHERE CategoryName=@CategoryName
RETURN
A segunda etapa é usar o designer DataSet para criar um DataTable no DataSet.
Na interface do gerenciador de soluções, clique com o botão direito no arquivo App_Code e selecione "Adicionar Novo Item". Selecione “DataSet” na caixa de diálogo pop-up, dê um nome a ele, como DataSetProducts.xsd, e clique no botão “Adicionar”. Neste momento, a ferramenta de configuração do TableAdapter aparecerá automaticamente. Se não aparecer ou for fechada por engano, clique com o botão direito em qualquer lugar do designer DataSet, selecione Adicionar e, em seguida, selecione TableAdapter e a ferramenta aparecerá novamente. Crie um DataTable de acordo com o assistente, selecione "Procedimentos armazenados existentes do usuário" como o tipo de comando na interface que aparece e especifique "ShowProductByCategory" como o comando Selecionar.
O procedimento armazenado criado na primeira etapa torna-se um DataTable na segunda etapa, e os dados do relatório são fornecidos por meio deste DataTable.
Figura 1: DataSetProducts.xsd contendo um DataTable é a fonte de dados do relatório
Etapa 3: Crie um arquivo de relatório.
Clique com o botão direito no gerenciador de soluções e selecione Adicionar novo item e selecione Modelo de relatório. Neste exemplo, o nome padrão Report.rdlc é usado diretamente. RDL significa linguagem de definição de relatório e c significa cliente. Em outras palavras, rdl é um relatório de servidor e rdlc é um relatório local.
Arraste a Tabela da caixa de ferramentas para o formulário de design do relatório. Esta "tabela" possui três partes: cabeçalho, conteúdo e final. Uma tabela é uma área que exibe dados e uma área exibe os elementos de dados no DataSet ao qual está vinculada. Embora um relatório possa ter muitas áreas, cada área só pode exibir o conteúdo de um DataSet. Com base nisso, podemos usar procedimentos armazenados para combinar dados de várias tabelas em um DataSet para preencher relatórios.
Figura 2: Controles na barra de ferramentas dedicada aos modelos de relatório
Abra a janela “Fonte de dados do site” e encontre o conjunto de dados “DataSetProducts”, que é aquele criado na segunda etapa. Expanda até ver o DataTable chamado "ShowProductByCategory". Esta tabela tem esse nome porque selecionamos anteriormente "Usar procedimento armazenado existente" no assistente de configuração do TableAdapter e o nome do nosso procedimento armazenado é ShowProductByCategory.
Na janela da fonte de dados do site, arraste ProductName, UnitPrice e UnitsInStock para a linha que mostra detalhes no designer de relatório, ou seja, a primeira, segunda e terceira colunas da linha do meio. E você pode clicar com o botão direito em qualquer campo na linha de detalhes de exibição e, em seguida, localizar a guia Formato na barra de propriedades para definir seu formato de exibição para Preço unitário e Unidade em estoque.
Figura 3. O formulário da fonte de dados do site mostra os DataSets definidos em seu programa e as colunas que eles possuem.
Etapa 4: Adicione o controle ReportViewer à página ASP.NET2.0
Primeiro arraste o controle DropDownList para o formulário e, em seguida, vincule o campo CategoryName em Categorias selecionando a opção de fonte de dados. Em outros cenários, os usuários podem inserir parâmetros por meio de outros métodos, como caixas de texto, e depois passá-los para o procedimento armazenado.
Em seguida, arraste o controle Report View para o formulário e defina sua propriedade Visible como False. Outra coisa a observar é que o Report Viewer do ASP.NET 2.0 fornece métodos de exportação para Excel e PDF. No entanto, durante o processo real, descobri que sempre haverá uma pequena discrepância entre o relatório impresso e a forma como você o projetou.
Figura 4, defina esta página como a página de inicialização
Em seguida, acesse a marca inteligente do Report Viewer e selecione o arquivo Report.rdlc que você acabou de criar.
Figura 5: Combine o arquivo de definição de relatório no controle Report Viewer.
Etapa 5: escreva o código para permitir que os usuários selecionem nomes diferentes na caixa suspensa e exibam dados diferentes no relatório.
Não se esqueça de adicionar o namespace Microsoft.Reporting.WebForms ao seu code-behind (ou arquivo de código). arquivo.
1<PRE lang=cs id=pre1 style="MARGIN-TOP: 0px">usando Sistema;
2usando System.Data;
3usando System.Data.SqlClient;
4usando System.Configuration;
5usando System.Collections;
6usando System.Web;
7usando System.Web.Security;
8usando System.Web.UI;
9usando System.Web.UI.WebControls;
10usando System.Web.UI.WebControls.WebParts;
11usando System.Web.UI.HtmlControls;
12usando Microsoft.ApplicationBlocks.Data;
13usando Microsoft.Reporting.WebForms;
14
15classe parcial pública ReportViewerLocalMode: System.Web.UI.Page
16{
17 string pública thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*Eu usei a seguinte instrução para mostrar se você tem vários
22 parâmetros de entrada, declare o parâmetro com o número
23 de parâmetros em sua aplicação, ex. New SqlParameter[4];
vinte e quatro
25 public SqlParameter[] SearchValue = new SqlParameter[1];
26
27 void protegido RunReportButton_Click(objeto remetente, EventArgs e)
28 {
29 //ReportViewer1.Visible é definido como falso no modo de design
30 ReportViewer1.Visible = verdadeiro;
31 SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = new System.Data.DataSet();
33 SearchValue[0] = new SqlParameter("@CategoryName",
34 DropDownList1.SelectedValue);
35
36 /**//* Coloca o resultado do procedimento armazenado em um conjunto de dados */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 "ShowProductByCategory", SearchValue);
39
40 /**//*ou thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory", lista suspensa1.selectedvalue);
42 se você tiver apenas 1 parâmetro de entrada */
43
44 /**//* Associa thisDataSet (agora carregado com o arquivo armazenado
45 resultado do procedimento) com a fonte de dados ReportViewer */
46 Fonte de dados ReportDataSource = novo
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(fonte de dados);
52 se (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "Desculpe, não há produtos nesta categoria!";
55}
56
57 ReportViewer1.LocalReport.Refresh();
58}
59}</PRÉ>
Passo 6: Para executar o relatório,
pressione a tecla F5 e clique no botão “Executar Relatório” para executar o relatório.
Figura 6, relatório em execução
Por fim, certifique-se de que o ReportViewer esteja introduzido no site e configure o arquivo web.config. Ele pode estar no seguinte formato:
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms,
Versão=8.0.0.0, Culture=neutral,
PublicKeyToken=?? ??????????"
validar="false" />
</httpHandlers>
Ao implantar um projeto de site com controle ReportViewer em outro servidor, você precisa copiar o arquivo C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe. servidor de destino.
Experiência de tradução: Parece que esta é a tradução mais simples que já fiz, mas pode ser porque o autor disse que é relativamente concisa e clara.
Experiência de aprendizagem: O autor elaborou dois métodos de relatório aceitáveis para o ReportViewer e fez uma análise simples. No entanto, em projetos reais, mais pessoas podem usar o Modo Servidor. O Modo Local ainda pode produzir alguns relatórios que não são muito grandes ou muito complexos.
Sei que tem gente na empresa que se especializa em RS. Diz-se que demora uma semana para fazer isso depende da qualidade da escrita. Dez minutos é normal, e se ultrapassar trinta minutos. talvez seja necessário considerar alterar o algoritmo. Parece assustador, haha, mas se puder ser usado para as necessidades de relatórios do departamento fotovoltaico no andar de baixo, quero ficar mais confortável do que o método GridView para Excel anterior.
Se isso puder ser pesquisado e compreendido, pretendo fazer um vídeo introdutório especial com explicação para ajudar mais pessoas a entender esse controle.