【问题标题】:Display data using Microsoft Report Viewer使用 Microsoft Report Viewer 显示数据
【发布时间】:2018-06-17 02:42:39
【问题描述】:

我使用报表查看器创建了一个 Windows 窗体,显示来自 SQL 数据库的数据。 到目前为止我做了什么: 1. 我在导入到我的程序的 SQL 服务器上创建了存储过程(实体框架用作对象映射器)。 2. 我创建了带有参数的报表(.rdlc),该参数与存储过程中的参数相匹配。 3. 最后,我创建了报表查看器,并选择了已经创建的报表。

存储过程中有一个参数,如果我使用文本框传递值,一切正常。 但是,如果我尝试使用组合框使用“数据绑定项目”传递值,则报告查看器什么也不会显示。 这是一个有效的代码示例(通过文本框传递值):

private void btnFind_Click(object sender, EventArgs e)
        {
            GetCustomer_ResultBindingSource.DataSource = db.GetCustomer(txtProductName.Text).ToList();

            ReportParameter[] rParam = new ReportParameter[]
            {
                new ReportParameter("ProductName",txtProductName.Text)
            };

            reportViewer1.LocalReport.SetParameters(rParam);
            this.reportViewer1.RefreshReport();
        }

在报表查看器中不显示数据的组合框而不是文本框的解决方案是:

    GetCustomer_ResultBindingSource.DataSource = db.GetCustomer(cboProductName.SelectedItem.ToString()).ToList();

    ReportParameter[] rParam = new ReportParameter[]
    {
            new ReportParameter("ProductName",cboProductName.SelectedItem.ToString())
    };

    reportViewer1.LocalReport.SetParameters(rParam);
    this.reportViewer1.RefreshReport();

数据源已加载:

 private void Form1_Load(object sender, EventArgs e)
        {
            ProductBindingSource.DataSource = db.Products.ToList();
        }

数据源、显示成员和值成员在组合框的选项中定义(用于填充组合框)。

对第二种解决方案有帮助吗?

非常感谢!

【问题讨论】:

  • 如何填充组合框?,如果使用数据源,请确保分配dysplayMember属性和valueMember属性,然后使用combobox.selectedValue
  • 我已经说过combox是如何填充的(见最初的帖子)。
  • 然后,尝试分配 valueMember 和 displayMember,ValueMember 是 peroductname 列,调用时使用 SelectedValue 属性,与本例相同: GetCustomer_ResultBindingSource.DataSource = db.GetCustomer (cboProductName.SelectedValue) .ToList ();
  • 这很好。显示成员和价值成员是“产品名称”。 GetCustomer_ResultBindingSource.DataSource = db.GetCustomer (cboProductName.SelectedValue.ToString()) .ToList ();

标签: c# visual-studio reportviewer


【解决方案1】:

感谢 Henoc Salinas 和他在上面的评论。解决了。​​

这是可行的解决方案:

显示成员 = "产品名称" - 传递给 SQL 查询的值

Value Member = "Product Name"(一开始我在这里放了一个主键列,结果错了)。

因此我调用了 SelectedValue.ToString()(而不是 SelectedItem.ToString())

工作代码是:

private void btnFind_Click(object sender, EventArgs e)
        {
            GetCustomer_ResultBindingSource.DataSource = db.GetCustomer(cboProduct.SelectedValue.ToString()).ToList();

            ReportParameter[] rParam = new ReportParameter[]
            {
                new ReportParameter("ProductName", cboProduct.SelectedValue.ToString())
            };

            reportViewer1.LocalReport.SetParameters(rParam);
            reportViewer1.RefreshReport();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多