บทนำ:
บทความนี้เป็นลิงค์ที่ Kanyuanzi ให้ไว้เมื่อวันก่อน ฉันลืมไปว่าเป็นใคร ฉันจำได้แค่ว่ามีการโพสต์ที่อยู่ http://www.codeproject.com/aspnet/ReportViewer.asp แล้วมันก็เป็นเช่นนั้น บอกว่าเพราะเหตุใดจึงแปลไม่ได้ ต่อมาฉันได้ดูและมันก็มีประโยชน์สำหรับฉัน เพราะมีใครบางคนในบริษัทกำลังทำงานเกี่ยวกับผลิตภัณฑ์ของ RS และแผนกออปโตอิเล็กทรอนิกส์ที่ชั้นล่างก็มักจะมีความต้องการ BS เช่นกัน ฉันรู้เรื่องนี้มานานแล้วแต่ไม่เคยรู้มาก่อน เวลาศึกษาจึงบังเอิญมาเจอบทความนี้จึงศึกษาอย่างละเอียดตลอดบ่ายจึงแปลให้ฟังก่อนแล้วจึงเพิ่มเติมข้อมูลเชิงลึก
ในระหว่างขั้นตอนการแปล ฉันพยายามแปลให้มากที่สุดเท่าที่จะเป็นไปได้ แต่ยังคงความหมายของผู้เขียนต้นฉบับไว้ หากมีข้อผิดพลาดในการแปลโปรดวิพากษ์วิจารณ์และแก้ไขด้วย
มีโหมดบริการมากมาย (โหมดเซิร์ฟเวอร์) ของ SqlServer RS บนอินเทอร์เน็ต และฉันใช้เวลานานมากในการศึกษาโหมดท้องถิ่น (โหมดท้องถิ่น) โดยเฉพาะอย่างยิ่งเมื่อมีการเรียกพารามิเตอร์
เหตุผลที่ใช้โหมดโลคอลแทนโหมดเซิร์ฟเวอร์ก็เพราะทุกครั้งที่ไคลเอนต์ในโหมดบริการร้องขอรายงาน เซิร์ฟเวอร์จะต้องจัดระเบียบข้อมูลลงในรายงานแล้วส่งไปยังไคลเอนต์ แม้ว่าจะปลอดภัยกว่า แต่รายงานขนาดใหญ่ก็จะเป็นเช่นนั้น ไม่เคยได้รับการประมวลผล การส่งผ่านเซิร์ฟเวอร์ไปยังเบราว์เซอร์จะลดประสิทธิภาพลง
ดังนั้นบทความนี้จะอธิบายวิธีการจัดระเบียบรายงานและอ่านโดยใช้ตัวควบคุม ReportViewer ของ ASP.NET2.0 ที่นี่เราเลือกโหมดภายในเครื่องและใช้ขั้นตอนการจัดเก็บพร้อมพารามิเตอร์ สิ่งที่ฉันใช้คือ ASP.NET2.0, VisualStudio2005 และ SQLServer2005 รวมถึง Application Block หากคุณไม่มีเครื่องมือ Microsoft Application Block โปรดแทนที่โค้ดที่เรียกขั้นตอนการจัดเก็บผ่าน SQL Helper ในตัวอย่างด้วยคำสั่ง SQL
ที่นี่เราเลือกฐานข้อมูล Northwind ตัวอย่างของเราแสดงให้ผู้ใช้เลือกชื่อผลิตภัณฑ์จากรายการแบบเลื่อนลงแล้วกรองข้อมูลในรายงานออก
ขั้นตอนแรกคือการสร้างขั้นตอนการจัดเก็บALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
พร้อมด้วยพารามิเตอร์
AS
SELECT Categories.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Categories INNER JOIN Products ON
Categories.CategoryID = Products CategoryID
WHERE CategoryName=@CategoryName
RETURN
ขั้นตอนที่สองคือการใช้ตัวออกแบบชุดข้อมูลเพื่อสร้าง DataTable ภายใต้ชุดข้อมูล
ในอินเทอร์เฟซตัวจัดการโซลูชัน ให้คลิกขวาที่ไฟล์ App_Code และเลือก "เพิ่มรายการใหม่" เลือก "ชุดข้อมูล" ในกล่องโต้ตอบป๊อปอัป ตั้งชื่อ เช่น DataSetProducts.xsd จากนั้นคลิกปุ่ม "เพิ่ม" ในขณะนี้ เครื่องมือกำหนดค่า TableAdapter จะปรากฏขึ้นโดยอัตโนมัติ หากไม่ปรากฏขึ้นหรือถูกปิดโดยไม่ได้ตั้งใจ ให้คลิกขวาที่ใดก็ได้ในตัวออกแบบชุดข้อมูล เลือก เพิ่ม จากนั้นเลือก TableAdapter และเครื่องมือจะปรากฏขึ้นอีกครั้ง สร้าง DataTable ตามตัวช่วยสร้าง เลือก "User existing stores Procedure" เป็นประเภทคำสั่งในอินเทอร์เฟซที่ปรากฏขึ้น จากนั้นระบุ "ShowProductByCategory" เป็นคำสั่ง Select
ขั้นตอนการจัดเก็บที่สร้างขึ้นในขั้นตอนแรกจะกลายเป็น DataTable ในขั้นตอนที่สอง และข้อมูลรายงานจะถูกจัดเตรียมผ่าน DataTable นี้
รูปที่ 1: DataSetProducts.xsd ที่มี DataTable เป็นแหล่งข้อมูลของรายงาน
ขั้นตอนที่ 3: สร้างไฟล์รายงาน
คลิกขวาในตัวจัดการโซลูชันและเลือกเพิ่มรายการใหม่ จากนั้นเลือกเทมเพลตรายงาน ในตัวอย่างนี้ ชื่อเริ่มต้น Report.rdlc จะถูกใช้โดยตรง RDL หมายถึงภาษาคำจำกัดความของรายงาน และ c หมายถึงไคลเอ็นต์ กล่าวอีกนัยหนึ่ง rdl คือรายงานของเซิร์ฟเวอร์ และ rdlc คือรายงานในเครื่อง
ลากตารางจากกล่องเครื่องมือไปยังแบบฟอร์มการออกแบบรายงาน "ตาราง" นี้มีสามส่วน ส่วนหัว เนื้อหา และส่วนท้าย ตารางเป็นพื้นที่ที่แสดงข้อมูล และพื้นที่แสดงองค์ประกอบข้อมูลภายใต้ชุดข้อมูลที่ถูกผูกไว้ แม้ว่ารายงานสามารถมีหลายพื้นที่ได้ แต่แต่ละพื้นที่สามารถแสดงเนื้อหาของชุดข้อมูลชุดเดียวเท่านั้น จากนี้ เราสามารถใช้ขั้นตอนการจัดเก็บเพื่อรวมข้อมูลจากหลายตารางลงในชุดข้อมูลเพื่อเติมข้อมูลรายงาน
รูปที่ 2: การควบคุมในแถบเครื่องมือสำหรับเทมเพลตรายงานโดยเฉพาะ
เปิดหน้าต่าง "แหล่งข้อมูลเว็บไซต์" และค้นหาชุดข้อมูล "DataSetProducts" ซึ่งเป็นชุดที่สร้างขึ้นในขั้นตอนที่สอง ขยายจนกว่าคุณจะเห็น DataTable ชื่อ "ShowProductByCategory" ตารางนี้ถูกเรียกชื่อนี้เนื่องจากก่อนหน้านี้เราเลือก "ใช้ขั้นตอนการจัดเก็บที่มีอยู่" ในตัวช่วยสร้างการกำหนดค่า TableAdapter และชื่อของขั้นตอนการจัดเก็บของเราคือ ShowProductByCategory
ในหน้าต่างแหล่งข้อมูลเว็บไซต์ ให้ลาก ProductName, UnitPrice และ UnitsInStock ไปที่แถวที่แสดงรายละเอียดในตัวออกแบบรายงาน นั่นคือคอลัมน์แรก ที่สอง และสามของแถวกลาง และคุณสามารถคลิกขวาที่ฟิลด์ใดก็ได้ในแถวรายละเอียดการแสดงผล จากนั้นค้นหาแท็บรูปแบบในแถบคุณสมบัติเพื่อกำหนดรูปแบบการแสดงราคาต่อหน่วยและหน่วยในสต็อก
รูปที่ 3 แบบฟอร์มแหล่งข้อมูลเว็บไซต์แสดงชุดข้อมูลที่กำหนดในโปรแกรมของคุณและคอลัมน์ที่มี
ขั้นตอนที่ 4: เพิ่มตัวควบคุม ReportViewer ลงในเพจ ASP.NET2.0
ขั้นแรกลากตัวควบคุม DropDownList ลงในแบบฟอร์ม จากนั้นผูกฟิลด์ CategoryName ในหมวดหมู่โดยการเลือกตัวเลือกแหล่งข้อมูล ในสถานการณ์อื่น ผู้ใช้สามารถป้อนพารามิเตอร์ผ่านวิธีการอื่น เช่น กล่องข้อความ แล้วส่งผ่านไปยังขั้นตอนที่เก็บไว้
จากนั้น ลากตัวควบคุมมุมมองรายงานลงบนแบบฟอร์ม และตั้งค่าคุณสมบัติที่มองเห็นได้เป็นเท็จ สิ่งที่ควรทราบอีกประการหนึ่งก็คือ Report Viewer ของ ASP.NET 2.0 มีวิธีการส่งออก Excel และ PDF อย่างไรก็ตาม ในระหว่างกระบวนการจริง ฉันพบว่าจะมีความแตกต่างเล็กน้อยระหว่างรายงานที่พิมพ์ออกมากับวิธีที่คุณออกแบบ
รูปที่ 4 ตั้งค่าหน้านี้ให้เป็นหน้าเริ่มต้น
จากนั้น เรียกสมาร์ทแท็กของ Report Viewer และเลือกไฟล์ Report.rdlc ที่คุณเพิ่งสร้างขึ้น
รูปที่ 5: รวมไฟล์คำจำกัดความของรายงานเข้ากับส่วนควบคุมโปรแกรมดูรายงาน
ขั้นตอนที่ 5: เขียนโค้ดเพื่อให้ผู้ใช้สามารถเลือกชื่อที่แตกต่างกันในกล่องดรอปดาวน์ จากนั้นแสดงข้อมูลอื่นในรายงาน
อย่าลืมเพิ่มเนมสเปซ Microsoft.Reporting.WebForms ให้กับโค้ดด้านหลัง (หรือไฟล์โค้ด) ไฟล์.
1<PRE lang=cs id=pre1 style="MARGIN-TOP: 0px">โดยใช้ระบบ;
2ใช้ระบบข้อมูล;
3ใช้ System.Data.SqlClient;
4การใช้ระบบการกำหนดค่า;
5การใช้ระบบคอลเลกชัน;
6ใช้ระบบ.เว็บ;
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 SqlParameter สาธารณะ [] SearchValue = SqlParameter ใหม่ [1];
26
27 โมฆะที่ได้รับการป้องกัน 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.SelectedValue);
35
36 /**//* นำผลลัพธ์ของ Stored Procedure มาใส่ในชุดข้อมูล */
37 thisDataSet = SqlHelper.ExecuteDataset (การเชื่อมต่อนี้,
38 "ShowProductByCategory", ค่าการค้นหา);
39
40 /**//*หรือ thisDataSet = SqlHelper.ExecuteDataset(การเชื่อมต่อนี้,
41 "ShowProductByCategory", dropdownlist1.selectedvalue);
42 หากคุณมีพารามิเตอร์อินพุตเพียง 1 ตัว */
43
44 /**//* เชื่อมโยงชุดข้อมูลนี้ (ตอนนี้โหลดพร้อมกับไฟล์ที่เก็บไว้
45 ผลลัพธ์ของขั้นตอน) ด้วยแหล่งข้อมูล ReportViewer */
46 แหล่งข้อมูล ReportDataSource = ใหม่
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 ข้อมูลชุดนี้.ตาราง[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(แหล่งข้อมูล);
52 ถ้า (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "ขออภัย ไม่มีสินค้าในหมวดหมู่นี้!";
55 }
56
57 ReportViewer1.LocalReport.รีเฟรช();
58 }
59}</PRE>
ขั้นตอนที่ 6: หากต้องการเรียกใช้รายงาน
ให้กดปุ่ม F5 แล้วคลิกปุ่ม "เรียกใช้รายงาน" เพื่อเรียกใช้รายงาน
รูปที่ 6 รายงานการรัน
สุดท้าย ตรวจสอบให้แน่ใจว่า ReportViewer ได้รับการแนะนำในเว็บไซต์และกำหนดค่าไฟล์ web.config ซึ่งอาจอยู่ในรูปแบบต่อไปนี้:
<httpHandlers>
<เพิ่มเส้นทาง = "Reserved.ReportViewerWebControl.axd" verb = "*"
type = "Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms,
เวอร์ชัน = 8.0.0.0, วัฒนธรรม =เป็นกลาง,
PublicKeyToken = ?? ??????????"
validate="false" />
</httpHandlers>
เมื่อปรับใช้โครงการเว็บไซต์ด้วยการควบคุม ReportViewer ไปยังเซิร์ฟเวอร์อื่น คุณต้องคัดลอกไฟล์ C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe จากนั้นเรียกใช้บน เซิร์ฟเวอร์เป้าหมาย
ประสบการณ์การแปล: ดูเหมือนว่านี่เป็นการแปลที่ง่ายที่สุดที่ฉันเคยทำมา แต่อาจเป็นเพราะผู้เขียนบอกว่าค่อนข้างกระชับและชัดเจน
ประสบการณ์การเรียนรู้: ผู้เขียนได้อธิบายรายละเอียดเกี่ยวกับวิธีการรายงานสองวิธีที่ ReportViewer ยอมรับได้ และทำการวิเคราะห์อย่างง่ายๆ อย่างไรก็ตาม ในโครงการจริง ผู้คนจำนวนมากอาจใช้โหมดเซิร์ฟเวอร์ โหมดภายในเครื่องยังคงสามารถสร้างรายงานบางรายการที่มีขนาดไม่ใหญ่เกินไปหรือซับซ้อนเกินไป
ฉันรู้ว่ามีคนในบริษัทที่เชี่ยวชาญเรื่อง RS ว่ากันว่าใช้เวลาหนึ่งสัปดาห์ในการทำมันขึ้นอยู่กับคุณภาพของการเขียน เป็นเรื่องปกติ และหากเกินสามสิบนาที คุณอาจต้องพิจารณาเปลี่ยนอัลกอริทึม ฟังดูน่ากลัวนะ 555 แต่ถ้าสามารถนำมาใช้กับความต้องการในการรายงานของแผนกไฟฟ้าโซลาร์เซลล์ชั้นล่างได้ ฉันอยากจะสบายใจมากกว่าวิธี GridView to Excel แบบก่อนๆ
หากสามารถค้นคว้าและทำความเข้าใจได้ ฉันวางแผนที่จะจัดทำวิดีโอคำอธิบายเบื้องต้นพิเศษเพื่อช่วยให้ผู้คนเข้าใจการควบคุมนี้มากขึ้น