带有BusinessObject数据源的ReportViewer显示一个空表

时间:2017-02-21 09:14:53

标签: c# asp.net reportviewer

我已按照找到的here

教程进行操作

唯一的区别是我正在设计Windows窗体应用程序。

我能够看到Merchant数据源,并按照我喜欢的方式设计了报告。我还确保Form1.frm有一个ReportViewer,它的报告指向我设计的报告。

当我运行程序时,报表查看器会向我显示设计的报表(我可以看到列名称),但没有行。

尽管如此,我确保在Product对象中创建了一些模板Merchant实例,如教程中所述,并未显示单个Product。 我重新设计了报告,以便它不会对任何内容进行分组/求和/计算,只是按原样列出所有Products,但是,我仍然只获取列名,现在是数据行。

我想,也许我需要在运行时实例化一个新的Merchant对象并将其传递给ReportViewer.LocalReport,但我发现无法做到这一点。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现了我需要做的事情,以便我在报告中填充数据表。

我使用Product类来构建用于设计报告的数据集

// the following code is copied from the tutorial pointed at my question.
// I just reduced it to the basics to make the answer short and simple
public class Product {
    private string m_name;
    private int m_price;

    public Product(string name, int price) {
        m_name = name;
        m_price = price;
    }
}

public class Merchant {
    private List<Product> m_products;

    public Merchant() {
        m_products = new List<Product>;
        m_products.Add(new Product("Pen",25));
        m_products.Add(new Product("Pencil",30));
        m_products.Add(new Product("Notebook",15));
    }

    public List<Product> getProducts() {
         return m_products;
    }
}

我在运行时需要做的就是更改数据绑定源的DataSource,这应该可以解决问题:

private void Form1_Load(object sender, EventArgs e) {

      Merchant merchant = new Merchant();  // Instantiate a new instance of Merchant
      // by now merchant already has a List of 3 Products


     //Call getProducts() to fetch a List of 3 Products and pass it
     // to the binding datasource used to design the report
     this.ProductBindingSource.DataSource = merchant.getProducts();


     //added by default (by the wizard)
     this.reportViewer1.RefreshReport();
}