我创建了一个带有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();
}
数据源,显示成员和值成员在组合框的选项中定义(用于填充组合框)。
第二种解决方案的任何帮助?
非常感谢!
答案 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();
}