Introducción:
este artículo es un enlace proporcionado por Kanyuanzi anteayer. Olvidé a quién pertenece. Solo recuerdo que se publicó la dirección http://www.codeproject.com/aspnet/ReportViewer.asp . Dijo eso porque por alguna razón no fue traducido. Más tarde eché un vistazo y resultó ser útil para mí, porque alguien en la empresa estaba trabajando en cosas de RS, y el departamento de optoelectrónica de abajo a menudo también tenía necesidades de BS. Yo sabía sobre esto desde hacía mucho tiempo, pero nunca había tenido. Es hora de estudiarlo, así que encontré este artículo, así que lo estudié detenidamente toda la tarde, lo traduje primero y luego agregué algunas ideas.
Durante el proceso de traducción, intenté localizarlo tanto como fuera posible, pero conservé el significado del autor original. Si hay alguna inexactitud en la traducción, critíqueme y corríjame.
Hay muchos modos de servicio (modo servidor) de SqlServer RS en Internet, y realmente pasé mucho tiempo estudiando el modo local (modo local), especialmente cuando hay llamadas de parámetros.
La razón por la que se utiliza el modo local en lugar del modo de servidor es porque cada vez que el cliente en modo de servicio solicita un informe, el servidor debe organizar los datos en un informe y luego enviarlo al cliente. Aunque esto es más seguro, el informe será enorme. nunca se procesará. La transmisión del servidor al navegador reduce su rendimiento.
Entonces, este artículo describe cómo organizar un informe y leerlo usando el control ReportViewer de ASP.NET2.0. Aquí elegimos el modo local y usamos un procedimiento almacenado con parámetros. Lo que uso es ASP.NET2.0, VisualStudio2005 y SQLServer2005 más Application Block. Si no tiene la herramienta Bloqueo de aplicaciones de Microsoft, reemplace el código que llama al procedimiento almacenado a través de SQL Helper en el ejemplo con el Comando SQL.
Aquí elegimos la base de datos Northwind. Nuestro ejemplo muestra al usuario seleccionar el nombre del producto de la lista desplegable y luego filtrar la información en el informe.
El primer paso es crear un procedimiento almacenadoALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
con parámetros
AS
SELECT Category.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Categorías INNER JOIN Productos ON
Categorías.CategoryID = Productos . CategoryID
WHERE CategoryName=@CategoryName
RETURN
El segundo paso es utilizar el diseñador de DataSet para crear una tabla de datos en el DataSet.
En la interfaz del administrador de soluciones, haga clic con el botón derecho en el archivo App_Code y seleccione "Agregar nuevo elemento". Seleccione "DataSet" en el cuadro de diálogo emergente, asígnele un nombre, como DataSetProducts.xsd, y luego haga clic en el botón "Agregar". En este momento, la herramienta de configuración de TableAdapter aparecerá automáticamente. Si no aparece o se cierra por error, haga clic derecho en cualquier lugar del diseñador de DataSet, seleccione Agregar y luego seleccione TableAdapter, y la herramienta aparecerá nuevamente. Cree una DataTable de acuerdo con el asistente, seleccione "Procedimientos almacenados existentes del usuario" como tipo de comando en la interfaz que aparece y luego especifique "ShowProductByCategory" como el comando Seleccionar.
El procedimiento almacenado creado en el primer paso se convierte en una DataTable en el segundo paso y los datos del informe se proporcionan a través de esta DataTable.
Figura 1: DataSetProducts.xsd que contiene un DataTable es la fuente de datos del informe
Paso 3: cree un archivo de informe.
Haga clic derecho en el administrador de soluciones y seleccione Agregar nuevo elemento, luego seleccione Plantilla de informe. En este ejemplo, el nombre predeterminado Report.rdlc se utiliza directamente. RDL significa lenguaje de definición de informes yc significa cliente. En otras palabras, rdl es un informe del servidor y rdlc es un informe local.
Arrastre la Tabla desde la caja de herramientas al formulario de diseño del informe. Esta "tabla" tiene tres partes, encabezado, contenido y cola. Una tabla es un área que muestra datos y un área muestra los elementos de datos bajo el conjunto de datos al que está vinculada. Aunque un informe puede tener muchas áreas, cada área solo puede mostrar el contenido de un conjunto de datos. En base a esto, podemos usar procedimientos almacenados para combinar datos de varias tablas en un conjunto de datos para completar informes.
Figura 2: Controles en la barra de herramientas dedicada a las plantillas de informes
Abra la ventana "Fuente de datos del sitio web" y busque el conjunto de datos "DataSetProducts", que es el creado en el segundo paso. Expanda hasta que vea el DataTable llamado "ShowProductByCategory". Esta tabla se llama así porque previamente seleccionamos "Usar procedimiento almacenado existente" en el asistente de configuración de TableAdapter, y el nombre de nuestro procedimiento almacenado es ShowProductByCategory.
En la ventana de fuente de datos del sitio web, arrastre ProductName, UnitPrice y UnitsInStock a la fila que muestra los detalles en el diseñador de informes, es decir, la primera, segunda y tercera columnas de la fila del medio. Y puede hacer clic con el botón derecho en cualquier campo en la fila de detalles de visualización y luego buscar la pestaña Formato en la barra de propiedades para definir su formato de visualización para Precio unitario y Unidad en stock.
Figura 3. El formulario de fuente de datos del sitio web muestra los DataSets definidos en su programa y las columnas que tienen.
Paso 4: agregue el control ReportViewer a la página ASP.NET2.0
Primero arrastre el control DropDownList al formulario y luego vincule el campo CategoryName en Categorías seleccionando la opción de fuente de datos. En otros escenarios, los usuarios pueden ingresar parámetros a través de otros métodos, como cuadros de texto, y luego pasarlos al procedimiento almacenado.
Luego, arrastre el control Vista de informe al formulario y establezca su propiedad Visible en Falso. Otra cosa a tener en cuenta es que el Visor de informes de ASP.NET 2.0 proporciona métodos de exportación a Excel y PDF. Sin embargo, durante el proceso real, descubrí que siempre habrá una ligera discrepancia entre el informe impreso y la forma en que lo diseñó.
Figura 4, establezca esta página en la página de Inicio
A continuación, abra la etiqueta inteligente del Visor de informes y seleccione el archivo Report.rdlc que acaba de crear.
Figura 5: Combine el archivo de definición de informe en el control Visor de informes.
Paso 5: escriba código para permitir a los usuarios seleccionar diferentes nombres en el cuadro desplegable y luego mostrar diferentes datos en el informe.
No olvide agregar el espacio de nombres Microsoft.Reporting.WebForms a su código subyacente (o archivo de código). archivo.
1<PRE lang=cs id=pre1 style="MARGIN-TOP: 0px">usando Sistema;
2usando datos del sistema;
3usando System.Data.SqlClient;
4usando la configuración del sistema;
5usando System.Colecciones;
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
15 clase parcial pública ReportViewerLocalMode: System.Web.UI.Page
16{
17 cadena pública thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*Utilicé la siguiente declaración para mostrar si tienes múltiples
22 parámetros de entrada, declarar el parámetro con el número
23 de parámetros en su aplicación, ej. New SqlParameter[4];
veinticuatro
25 público SqlParameter[] SearchValue = nuevo SqlParameter[1];
26
27 vacío protegido RunReportButton_Click (remitente del objeto, EventArgs e)
28 {
29 //ReportViewer1.Visible está configurado en falso en modo de diseño
30 ReportViewer1.Visible = verdadero;
31 SqlConnection thisConnection = nueva SqlConnection (thisConnectionString);
32 System.Data.DataSet thisDataSet = nuevo System.Data.DataSet();
33 SearchValue[0] = nuevo SqlParameter("@CategoryName",
34 DropDownList1.SelectedValue);
35
36 /**//* Poner el resultado del procedimiento almacenado en un conjunto de datos */
37 esteDataSet = SqlHelper.ExecuteDataset(estaConexión,
38 "MostrarProductByCategory", SearchValue);
39
40 /**//*o thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory", lista desplegable1.valor seleccionado);
42 si solo tienes 1 parámetro de entrada */
43
44 /**//* Asociar este conjunto de datos (ahora cargado con el almacenado
45 resultado del procedimiento) con la fuente de datos de ReportViewer */
46 fuente de datos ReportDataSource = nuevo
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 esteDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(fuente de datos);
52 si (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "¡Lo sentimos, no hay productos en esta categoría!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59}</PRE>
Paso 6: Para ejecutar el informe,
presione la tecla F5 y haga clic en el botón "Ejecutar informe" para ejecutar el informe.
Figura 6, informe en ejecución
Finalmente, asegúrese de que ReportViewer esté introducido en el sitio web y configure el archivo web.config. Puede tener el siguiente formato:
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms,
Versión=8.0.0.0, Cultura=neutral,
PublicKeyToken=?? ??????????"
validar="false" />
</httpHandlers>
Al implementar un proyecto de sitio web con control ReportViewer en otro servidor, debe copiar el archivo C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe. servidor de destino.
Experiencia de traducción: parece que esta es la traducción más simple que he hecho jamás, pero puede deberse a que el autor dijo que es relativamente concisa y clara.
Experiencia de aprendizaje: el autor desarrolló dos métodos de generación de informes aceptables para ReportViewer e hizo un análisis simple. Sin embargo, en proyectos reales, es posible que más personas usen el modo de servidor y aún así puedan generar algunos informes que no sean demasiado grandes ni demasiado complejos.
Sé que hay gente en la empresa que se especializa en RS. Se dice que tarda una semana en ejecutarse, depende de la calidad de la escritura. Diez minutos es normal, y si supera los treinta minutos. es posible que deba considerar cambiar el algoritmo. Suena aterrador, jaja, pero si se puede usar para las necesidades de informes del departamento fotovoltaico de abajo, quiero que sea más cómodo que el método anterior de GridView a Excel.
Si esto se puede investigar y comprender, planeo hacer una explicación introductoria especial en video para ayudar a más personas a comprender este control.