使用 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 包含报表操作的数据。

所以具体回答你的问题:

  1. 是(除非您的报告是完全静态的并且不使用任何数据)。

  2. 不,但您需要以某种方式将 .rdl 获取到 ReportViewer。如果您不想将它包含为一个文件,您可以将它作为一个资源嵌入到您的应用程序中,或者甚至将它硬编码为一个字符串。 ReportViewer 也有一个接受 Stream 的方法,因此任何可以提供流的东西都可以作为 .rdl.

  3. 的来源
  4. 它们是不同的,正如我在一开始所解释的。