建立 DataSet
新增資料集:Employee.xsd
在 Employee.xsd 內新增 DataTable:dtEmploy,並建立 DataColumn
HireDate 和 BirthDate 的 DataType 要改為 System.DateTime,預設為 System.String
完成後就可以在資料來源視窗內看見該 DataSet
建立報表
利用報表精靈建立 ReportByCode.rdlc 報表
名稱:dsEmploy
資料來源:選擇剛剛建立的 Employee DataSet
可用資料集:Employee.xsd 內的 dtEmploy DataTable
把全部欄位都拖曳到值的位置
練習用,沒有群組和彙總需求
選擇樣式
ReportByCode 報表配置
從報表資料視窗內可以看見剛剛的設定
ReportViewer 控件
拖曳一個 ReportViewer 控件進入 Form 中,並選擇報表
設定資料來源
從 AdventureWorks2014 內抓取資料,並塞到 ReportViewer 內
CREATE PROCEDURE GetEmployData
AS
SELECT
E.BusinessEntityID ,
P.LastName ,
P.FirstName ,
E.JobTitle ,
E.Birthdate ,
E.HireDate
FROM [HumanResources].[Employee] AS E
JOIN Person.Person AS P ON E.BusinessEntityID = P.BusinessEntityID
using Microsoft.Reporting.WinForms;
using System.Data.SqlClient;
namespace RVByCode
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Employee dsEmploy = GetEmployData();
ReportDataSource datasource = new ReportDataSource("dsEmploy", dsEmploy.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(datasource);
this.reportViewer1.RefreshReport();
}
private Employee GetEmployData()
{
string ConnectionString = @"Data Source=.\Sql2014;Initial Catalog=AdventureWorks2014;Integrated Security = true";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetEmployData";
SqlDataAdapter da = new SqlDataAdapter(cmd);
Employee dsEmploy = new Employee();
da.Fill(dsEmploy, "dtEmploy");
return dsEmploy;
}
catch (Exception)
{
throw;
}
}
}
}
}
檢視設定成果
ReportDataSource
只要是 DataSet 都一律用 ds 來當成開頭,沒想到執行時,還是有錯誤發生,錯誤訊息:尚未提供資料來源 'dsEmploy' 的資料來源執行個體
後來才發現是設定報表時,指定資料集名稱為 dsEmploy,ReportDataSource 的第一個參數要跟報表 DataSet 一模一樣才行
ReportDataSource datasource = new ReportDataSource("sourceEmploy", dsEmploy.Tables[0]);
// 改為
ReportDataSource datasource = new ReportDataSource("dsEmploy", dsEmploy.Tables[0]);
沒有留言:
張貼留言