使用Microsoft Report Viewer显示数据

时间:2018-06-16 13:23:21

标签: c# visual-studio reportviewer

我创建了一个带有Report Viewer的窗体,它显示了SQL数据库中的数据。 到目前为止我做了什么: 1.我在SQL服务器上创建了导入到我的程序的存储过程(实体框架用作对象映射器)。 2.我创建了带有参数的报告(.rdlc),该参数在存储过程中对参数进行了处理。 3.最后,我创建了Report Viewer并选择了已创建的报告。

存储过程中有一个参数,如果我使用文本框传递值,一切都很好。 但是,如果我尝试使用" Data Bound Items"使用组合框传递值。 Report Viewer不显示任何内容。 这是一个有效的代码示例(通过文本框传递值):

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

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

第二种解决方案的任何帮助?

非常感谢!

1 个答案:

答案 0 :(得分:0)

感谢Henoc Salinas及其上述评论。这已经解决了。

这是有效的解决方案:

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

价值会员 =“产品名称”(最初我在这里放了一个主键列,但这是错误的。)

因此我调用了 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();
        }