具有 Business Objects 数据源的 ReportViewer 显示空 table

ReportViewer with BusinessObject datasource shows an empty table

我已经按照教程找到了here

唯一不同的是,我正在设计一个 Windows 表单应用程序。

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

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

虽然,我确保在 Merchant 对象中创建了一些模板 Product 实例,如教程中所述,但没有显示一个 Product。 我重新设计了报告,因此它不会 group/sum/count 任何东西,只是按原样列出所有 Products,但是,我仍然只得到列名,现在是数据行。

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

我做错了什么?

我发现我需要做什么才能在报告中填充数据 table。

我使用 Product class 构建了用于设计报告的数据集

// 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();
}