Введение:
Эта статья представляет собой ссылку, предоставленную Каньюаньзи позавчера. Я забыл, кому она принадлежит. Помню только, что был опубликован адрес http://www.codeproject.com/aspnet/ReportViewer.asp , а потом это было. сказал, что т.к. его почему-то не перевели. Позже я посмотрел, и мне это пригодилось, потому что кто-то в компании работал над RS, а в отделе оптоэлектроники внизу тоже часто были потребности в BS, я знал об этой штуке давно, но никогда не было. пришло время изучить ее, поэтому я случайно нашел эту статью. Поэтому я внимательно изучал ее весь день, сначала перевел, а затем добавил некоторые идеи.
В процессе перевода я постарался максимально локализовать его, но сохранил смысл оригинала. Если в переводе есть неточности, прошу покритиковать и поправить меня.
В Интернете есть много сервисных режимов (Server Mode) SqlServer RS, и я действительно потратил много времени на изучение локального режима (Local Mode), особенно при наличии вызовов параметров.
Причина, по которой вместо режима сервера используется локальный режим, заключается в том, что каждый раз, когда клиент в сервисном режиме запрашивает отчет, сервер должен организовать данные в отчет, а затем отправить его клиенту. Хотя это безопаснее, огромный отчет будет. никогда не обрабатываться. Передача с сервера на браузер снижает его производительность.
Итак, в этой статье описывается, как организовать отчет и прочитать его с помощью элемента управления ReportViewer ASP.NET2.0. Здесь мы выбираем локальный режим и используем хранимую процедуру с параметрами. Я использую ASP.NET2.0, VisualStudio2005 и SQLServer2005 плюс блок приложений. Если у вас нет инструмента Microsoft Application Block, замените код, который вызывает хранимую процедуру через SQL Helper в этом примере, на команду SQL.
Здесь мы выбираем базу данных Northwind. В нашем примере показано, как пользователь выбирает название продукта из раскрывающегося списка, а затем фильтрует информацию в отчете.
Первым шагом является создание хранимой процедурыALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
с параметрами
AS
SELECT Категории.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Категории INNER JOIN Products ON
Категории.CategoryID = Products . CategoryID
WHERE CategoryName=@CategoryName
RETURN
Второй шаг — использовать конструктор DataSet для создания DataTable в DataSet.
В интерфейсе диспетчера решений щелкните правой кнопкой мыши файл App_Code и выберите «Добавить новый элемент». Выберите «DataSet» во всплывающем диалоговом окне, дайте ему имя, например DataSetProducts.xsd, а затем нажмите кнопку «Добавить». В это время автоматически появится инструмент настройки TableAdapter. Если он не отображается или закрыт по ошибке, щелкните правой кнопкой мыши в любом месте конструктора DataSet, выберите «Добавить», а затем выберите TableAdapter, и инструмент появится снова. Создайте DataTable в соответствии с мастером, выберите «Существующие хранимые процедуры пользователя» в качестве типа команды в появившемся интерфейсе, а затем укажите «ShowProductByCategory» в качестве команды «Выбрать».
Хранимая процедура, созданная на первом этапе, становится DataTable на втором этапе, и данные отчета предоставляются через эту DataTable.
Рисунок 1. DataSetProducts.xsd, содержащий DataTable, является источником данных отчета.
Шаг 3. Создайте файл отчета.
Щелкните правой кнопкой мыши в диспетчере решений и выберите «Добавить новый элемент», затем выберите «Шаблон отчета». В этом примере имя по умолчанию Report.rdlc используется напрямую. RDL означает язык определения отчетов, а c означает клиент. Другими словами, rdl — это отчет сервера, а rdlc — локальный отчет.
Перетащите таблицу из панели инструментов в форму дизайна отчета. Эта «таблица» состоит из трех частей: заголовка, содержимого и хвоста. Таблица — это область, в которой отображаются данные, а область отображает элементы данных в наборе данных, к которому она привязана. Хотя отчет может иметь множество областей, каждая область может отображать содержимое только одного набора данных. Основываясь на этом, мы можем использовать хранимые процедуры для объединения данных из нескольких таблиц в DataSet для заполнения отчетов.
Рисунок 2. Элементы управления на панели инструментов, предназначенной для шаблонов отчетов.
Откройте окно «Источник данных веб-сайта» и найдите набор данных «DataSetProducts», созданный на втором этапе. Разворачивайте, пока не увидите DataTable под названием «ShowProductByCategory». Эта таблица называется таким именем, поскольку ранее мы выбрали «Использовать существующую хранимую процедуру» в мастере настройки TableAdapter, а имя нашей хранимой процедуры — ShowProductByCategory.
В окне источника данных веб-сайта перетащите ProductName, UnitPrice и UnitsInStock в строку, отображающую детали в дизайнере отчетов, то есть в первый, второй и третий столбцы средней строки. Вы можете щелкнуть правой кнопкой мыши любое поле в строке сведений об отображении, а затем найти вкладку «Формат» на панели свойств, чтобы определить формат отображения цены за единицу и единицы на складе.
Рисунок 3. Форма источника данных веб-сайта показывает наборы данных, определенные в вашей программе, и содержащиеся в них столбцы.
Шаг 4. Добавьте элемент управления ReportViewer на страницу ASP.NET2.0
. Сначала перетащите элемент управления DropDownList в форму, а затем привяжите поле «Имя категории» в разделе «Категории», выбрав параметр источника данных. В других сценариях пользователи могут вводить параметры с помощью других методов, например текстовых полей, а затем передавать их в хранимую процедуру.
Затем перетащите элемент управления «Представление отчета» на форму и установите для его свойства Visible значение False. Еще следует отметить, что средство просмотра отчетов ASP.NET 2.0 предоставляет методы экспорта в Excel и PDF. Однако в ходе самого процесса я обнаружил, что между печатным отчетом и тем, как вы его разработали, всегда будет небольшое несоответствие.
Рисунок 4: установите эту страницу на страницу запуска.
Затем вызовите смарт-тег средства просмотра отчетов и выберите только что созданный файл Report.rdlc.
Рис. 5. Объединение файла определения отчета с элементом управления Report Viewer.
Шаг 5. Напишите код, позволяющий пользователям выбирать разные имена в раскрывающемся списке, а затем отображать разные данные в отчете.
Не забудьте добавить пространство имен Microsoft.Reporting.WebForms в свой выделенный код (или файл кода). файл.
1
с использованием системы;
2использование System.Data;
3с использованием System.Data.SqlClient;
4использование System.Configuration;
5использование System.Collections;
6использование System.Web;
7с использованием System.Web.Security;
8использование System.Web.UI;
9с использованием System.Web.UI.WebControls;
10с использованием System.Web.UI.WebControls.WebParts;
11с использованием System.Web.UI.HtmlControls;
12с использованием Microsoft.ApplicationBlocks.Data;
13с использованием Microsoft.Reporting.WebForms;
14
15публичный частичный класс ReportViewerLocalMode: System.Web.UI.Page
16{
17 общедоступная строка thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*Я использовал следующий оператор, чтобы показать, есть ли у вас несколько
22 входных параметра, объявите параметр с номером
23 параметра вашего приложения, например New SqlParameter[4];
двадцать четыре
25 public SqlParameter[] SearchValue = новый SqlParameter[1];
26
27 protected void RunReportButton_Click (отправитель объекта, EventArgs e)
28 {
29 //ReportViewer1.Visible в режиме разработки имеет значение false.
30 ReportViewer1.Visible = правда;
31 SqlConnection thisConnection = новый SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = новый System.Data.DataSet();
33 SearchValue[0] = новый SqlParameter("@CategoryName",
34 DropDownList1.ВыбранноеЗначение);
35
36 /**//* Помещаем результат хранимой процедуры в набор данных */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 "ShowProductByCategory", SearchValue);
39
40 /**//*или thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory", dropdownlist1.selectedvalue);
42, если у вас только 1 входной параметр */
43
44 /**//* Свяжите этот набор данных (теперь загруженный с сохраненным
45 результат процедуры) с источником данных ReportViewer */
46 Источник данных ReportDataSource = новый
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(источник данных);
52 if (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "К сожалению, в этой категории нет товаров!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59
Шаг 6: Чтобы запустить отчет,
нажмите клавишу F5 и нажмите кнопку «Запустить отчет», чтобы запустить отчет.
Рисунок 6. Отчет о работе
Наконец, убедитесь, что ReportViewer добавлен на веб-сайт, и настройте файл web.config. Он может иметь следующий формат:
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=?? ??????????" validate="false" /> При развертывании проекта веб-сайта с элементом управления ReportViewer на другом сервере необходимо скопировать файл C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe, а затем запустить его на сервере. целевой сервер. Опыт перевода: Кажется, это самый простой перевод, который я когда-либо делал, но, возможно, это потому, что автор сказал, что он относительно краток и ясен. Опыт обучения: автор подробно остановился на двух методах создания отчетов, приемлемых для ReportViewer, и провел простой анализ. Однако в реальных проектах больше людей могут использовать режим сервера. Локальный режим все равно может создавать некоторые отчеты, которые не являются слишком большими или слишком сложными. Я знаю, что в компании есть люди, которые специализируются на РС. Говорят, что на это уходит неделя. При беге это зависит от качества написания. Десять минут - это нормально, а если превышает тридцать минут. возможно, вам придется рассмотреть возможность изменения алгоритма. Звучит пугающе, ха-ха, но если его можно использовать для отчетности фотоэлектрического отдела внизу, я хочу, чтобы он был более удобным, чем предыдущий метод GridView to Excel. Если это удастся изучить и понять, я планирую сделать специальное вводное видео-объяснение, чтобы помочь большему количеству людей понять этот элемент управления.