使用 C# 进行 RDLC 报告
RDLC Reporting using C#
我完全不熟悉 visual studio C# 中的报告。我尝试为初学者搜索一些教程,但没有成功。我只是找到了没有真正解释基础知识的代码示例...我写了一些符合 运行 的代码,但它在 Visual Studio 2013 年的报告查看器控件中没有显示任何内容。我的代码如下:
// This method is in a class named Customers.
// When the user clicks the first column of the datagrid view(I have placed a button
// in the first column of the datagrid) a new form opens (ReportForm) and i pass
// the DataSet called dsReport to its constructor.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 )
{
DataSet dsReport = new DataSet();
DataTable tbl = dsReport.Tables.Add();
tbl.Columns.Add("CustomerName", typeof(string));
tbl.Columns.Add("CustomerAddress", typeof(string));
tbl.Columns.Add("MaritalStatus", typeof(string));
tbl.Columns.Add("CustomerType", typeof(string));
tbl.Columns.Add("ImagePath", typeof(string));
foreach (Customer cust in customerList)
{
DataRow dr = dsReport.Tables[0].NewRow();
dr["CustomerName"] = cust.Name;
dr["CustomerAddress"] = cust.Address;
dr["MaritalStatus"] = cust.MaritalStatus;
dr["CustomerType"] = cust.CustomerType;
dr["ImagePath"] = cust.ImagePath;
dsReport.Tables[0].Rows.Add(dr);
}
ReportForm report = new ReportForm(dsReport);
report.Show();
}
}
//Following is the code for the ReportForm Class
//I do not get any results in the report viewer
//I just see the message "The source of the report definition has not been specified"
public ReportForm(DataSet dsReport)
{
InitializeComponent();
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(myReportSource);
this.reportViewer1.ProcessingMode = ProcessingMode.Local;
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
}
private void ReportForm_Load(object sender, EventArgs e)
{
this.reportViewer1.RefreshReport();
}
/* 请注意,我有 运行 调试器中的代码和数据集
正确填充 reportViewer1.LocalReport..我还没有
向项目添加了任何数据源并且我没有添加任何报告文件(.rdl)文件
到项目 */
最后请大家回答以下问题:
Q1。我一定要包含一个数据源来处理报告吗
查看器工具??
Q2。是否必须在项目中包含 .rdl 文件才能显示报告?
Q3。报告查看器工具和 .rdl 文件是同一个还是它们
不同??
ReportViewer 是一个知道如何呈现报表的控件。它只是处理绘图和其他一些后台任务,而不是实际的报告。实际报告是 .rdl
文件(报告定义语言)。它包含生成报告的所有说明,但不包含实际数据。 DataSource 包含报表操作的数据。
所以具体回答你的问题:
是(除非您的报告是完全静态的并且不使用任何数据)。
不,但您需要以某种方式将 .rdl
获取到 ReportViewer。如果您不想将它包含为一个文件,您可以将它作为一个资源嵌入到您的应用程序中,或者甚至将它硬编码为一个字符串。 ReportViewer 也有一个接受 Stream
的方法,因此任何可以提供流的东西都可以作为 .rdl
.
的来源
它们是不同的,正如我在一开始所解释的。
我完全不熟悉 visual studio C# 中的报告。我尝试为初学者搜索一些教程,但没有成功。我只是找到了没有真正解释基础知识的代码示例...我写了一些符合 运行 的代码,但它在 Visual Studio 2013 年的报告查看器控件中没有显示任何内容。我的代码如下:
// This method is in a class named Customers.
// When the user clicks the first column of the datagrid view(I have placed a button
// in the first column of the datagrid) a new form opens (ReportForm) and i pass
// the DataSet called dsReport to its constructor.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 )
{
DataSet dsReport = new DataSet();
DataTable tbl = dsReport.Tables.Add();
tbl.Columns.Add("CustomerName", typeof(string));
tbl.Columns.Add("CustomerAddress", typeof(string));
tbl.Columns.Add("MaritalStatus", typeof(string));
tbl.Columns.Add("CustomerType", typeof(string));
tbl.Columns.Add("ImagePath", typeof(string));
foreach (Customer cust in customerList)
{
DataRow dr = dsReport.Tables[0].NewRow();
dr["CustomerName"] = cust.Name;
dr["CustomerAddress"] = cust.Address;
dr["MaritalStatus"] = cust.MaritalStatus;
dr["CustomerType"] = cust.CustomerType;
dr["ImagePath"] = cust.ImagePath;
dsReport.Tables[0].Rows.Add(dr);
}
ReportForm report = new ReportForm(dsReport);
report.Show();
}
}
//Following is the code for the ReportForm Class
//I do not get any results in the report viewer
//I just see the message "The source of the report definition has not been specified"
public ReportForm(DataSet dsReport)
{
InitializeComponent();
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(myReportSource);
this.reportViewer1.ProcessingMode = ProcessingMode.Local;
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
}
private void ReportForm_Load(object sender, EventArgs e)
{
this.reportViewer1.RefreshReport();
}
/* 请注意,我有 运行 调试器中的代码和数据集 正确填充 reportViewer1.LocalReport..我还没有 向项目添加了任何数据源并且我没有添加任何报告文件(.rdl)文件 到项目 */
最后请大家回答以下问题:
Q1。我一定要包含一个数据源来处理报告吗 查看器工具??
Q2。是否必须在项目中包含 .rdl 文件才能显示报告?
Q3。报告查看器工具和 .rdl 文件是同一个还是它们 不同??
ReportViewer 是一个知道如何呈现报表的控件。它只是处理绘图和其他一些后台任务,而不是实际的报告。实际报告是 .rdl
文件(报告定义语言)。它包含生成报告的所有说明,但不包含实际数据。 DataSource 包含报表操作的数据。
所以具体回答你的问题:
是(除非您的报告是完全静态的并且不使用任何数据)。
不,但您需要以某种方式将
.rdl
获取到 ReportViewer。如果您不想将它包含为一个文件,您可以将它作为一个资源嵌入到您的应用程序中,或者甚至将它硬编码为一个字符串。 ReportViewer 也有一个接受Stream
的方法,因此任何可以提供流的东西都可以作为.rdl
. 的来源
它们是不同的,正如我在一开始所解释的。