ReportViewer不显示数据
本文关键字:数据 显示 ReportViewer | 更新日期: 2023-09-27 18:19:19
这个想法是输入新的字段,然后在报告中显示它们http://www.mediafire.com/view/6sla63hpecx2cc9/workflow.PNGmediafire.com/view/1juiekfr5gbk48d/theproplem.GIF
我过滤数据集中的表,它假设显示数据,它与DataGridView完美配合,现在我希望找到一种方法来填写与填写数据网格相同的数据集的报告
public partial class bill : Form
{
SqlConnection cn = new SqlConnection(@"Data Source=.'SQLEXPRESS;AttachDbFilename=G:'I.S'C#'C#(Projects)'Nothin'billingSystem'billingSystem'Store.mdf;Integrated Security=True;User Instance=True");
public bill(string Cusn,string su,string am,string to,string Di, string Cnum)
{
InitializeComponent();
label1.Text = Cusn;
label2.Text = su;
label3.Text = am;
label4.Text = to;
label5.Text = Di;
label6.Text = DateTime.Now.ToString("d/M/yyyy");
label7.Text = Cnum;
}
private void bill_Load(object sender, EventArgs e)
{
LoadReport();
}
private void LoadReport()
{
int R = Convert.ToInt32(label7.Text);
SqlDataAdapter ADAP = new SqlDataAdapter("Select * from Newbill where Con = '" + R + "'", cn);
DataSet DS = new DataSet();
ADAP.Fill(DS, "Store");
dataGridView1.DataSource = DS.Tables["Store"];
// TODO: This line of code loads data into the 'DataSet10.NewBill' table. You can move, or remove it, as needed.
this.NewBillTableAdapter.Fill(this.DataSet10.NewBill, R);
this.reportViewer1.RefreshReport();
ReportParameter[] allPar = new ReportParameter[5]; // create parameters array
ReportParameter parSu = new ReportParameter("Summation", label2.Text);
ReportParameter parDiscount = new ReportParameter("Discount", label5.Text);
ReportParameter parDisA = new ReportParameter("DiscountAmount", label3.Text);
ReportParameter parTotal = new ReportParameter("Total", label4.Text);
ReportParameter parCus = new ReportParameter("CustomerName", label1.Text);
allPar[0] = parSu; //assign parameters to parameter array
allPar[1] = parDiscount;
allPar[2] = parTotal;
allPar[3] = parDisA;
allPar[4] = parCus;
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.RefreshReport();
// TODO: This line of code loads data into the 'DataSet1.NewBill' table. You can move, or remove it, as needed.
//this.NewBillTableAdapter.Fill(this.DataSet1.NewBill, R, O);
//this.reportViewer1.RefreshReport();
}
}
我看过这个:http://www.verious.com/qa/how-can-i-load-datatable-as-report-data-source/
实际上我需要的步骤,从数据库查看数据与查询过滤报告中的数据,所有我在谷歌上发现的只是这样:http://www.codeproject.com/Articles/31862/Dynamic-Binding-Of-RDLC-To-ReportViewer,但它不工作时,一个新的字段已插入。
如何,我尝试刷新数据集,以包括发生在表中的更改(在我的情况下插入新行"新数据")但是它给了我:
A data source instance has not been supplied for the data source 'DataSet 10_NewBill'.
private void LoadReport()
{
int R = Convert.ToInt32(label7.Text);
this.reportViewer1.LocalReport.DataSources.Clear();
DataTable dt = new DataTable();
dt = this.NewBillTableAdapter.GetData(R);
ReportDataSource rprtDTSource = new ReportDataSource(dt.TableName, dt);
this.reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer1.RefreshReport();
// TODO: This line of code loads data into the 'DataSet10.NewBill' table. You can move, or remove it, as needed.
this.NewBillTableAdapter.Fill(this.DataSet10.NewBill,R );
this.reportViewer1.RefreshReport();
ReportParameter[] allPar = new ReportParameter[5]; // create parameters array
ReportParameter parSu = new ReportParameter("Summation", label2.Text);
ReportParameter parDiscount = new ReportParameter("Discount", label5.Text);
ReportParameter parDisA = new ReportParameter("DiscountAmount", label3.Text);
ReportParameter parTotal = new ReportParameter("Total", label4.Text);
ReportParameter parCus = new ReportParameter("CustomerName", label1.Text);
allPar[0] = parSu; //assign parameters to parameter array
allPar[1] = parDiscount;
allPar[2] = parTotal;
allPar[3] = parDisA;
allPar[4] = parCus;
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.RefreshReport();
}
和
int R = Convert.ToInt32(label7.Text);
SqlDataAdapter ADAP = new SqlDataAdapter("Select * from Newbill where Con = '" + R + "'", cn);
DataSet DS = new DataSet();
ADAP.Fill(DS, "Store");
DataTable dt = new DataTable();
dt.TableName = "Store";
cn.Open();
ADAP.Fill(dt);
reportViewer1.ProcessingMode = ProcessingMode.Local;
ReportDataSource source = new ReportDataSource("Store", dt);
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.DataSources.Add(source);
reportViewer1.DataBind();
reportViewer1.LocalReport.Refresh();
cn.Close();
它给我:错误'Microsoft.Reporting.WinForms。ReportViewer'不包含'DataBind'的定义,也没有扩展方法'DataBind'接受类型为'Microsoft.Reporting.WinForms '的第一个参数。可以找到ReportViewer
使用时需要什么参考?
首先创建您的rpt对象,然后设置数据源。
按照以下步骤操作。
CrystalReport1 objRpt = new CrystalReport1(); //create your rpt object
objRpt.SetDataSource(Dataset.Tables["tablename"]); //set datasource to your rpt.
cryRptViewer.ReportSource = objRpt; //give rpt object to your crystal report viewer.
好吧,我将尝试回答你的WinForms
和ASP.NET
的问题,因为你没有指定你使用的是哪一个。问题是你在一份空报告上呼叫RefreshReport
…它返回的就是这个;一个空的报告。
winforms设置报表数据源
//First Create a `DataSource` for your Report:
ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "ReportData";
reportDataSource.Value = DS.Tables["Store"];
//Then bind the ReportViewer to that DataSource
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.LocalReport.DataSources.Add(reportDataSource); //This is what you are missing
this.reportViewer1.RefreshReport();
ASP。报表的净设置数据源
//First Create a `DataSource` for your Report - Same as winforms
ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "ReportData";
reportDataSource.Value = DS.Tables["Store"];
//Then bind the ReportViewer to that DataSource
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
this.reportViewer1.DataBind(); //This is the difference in ASP.Net
this.reportViewer1.RefreshReport();
从您的示例中,您可以整天设置SqlConnection
s, ReportParameter
s和DataTable
s,但是除非您将ReportViewer
绑定到已填充的DataSet
,否则您将一无所获。
这是我在将本地RDLC绑定到报表查看器时使用的。
<>之前//创建SqlConnectionSqlConnection myConnection = new SqlConnection(ConnectionString);myCommand。Connection = myConnection;SqlDataAdapter da = new SqlDataAdapter(myCommand);//获取数据DataSet data = new DataSet();da.Fill(数据);if (data != null && data. tables . count> 0 && data. tables [0]. rows。计数> 0){ReportingServicesReportViewer。Visible = true;ltrStatus。Text = string.Empty;//向查看器提供本地报表信息ReportingServicesReportViewer.LocalReport.ReportPath = Server.MapPath(Report.RDLCPath);//将报表属性和数据绑定到reportviewerReportDataSource rds = new ReportDataSource("DataSet1", data.Tables[0]);ReportingServicesReportViewer.LocalReport.DataSources.Clear ();ReportingServicesReportViewer.LocalReport.DataSources.Add (rds);ReportingServicesReportViewer.LocalReport.Refresh ();}其他的{ReportingServicesReportViewer。Visible = false;ltrStatus。Text = "无数据显示";}之前当没有给数据表一个名称时,我有问题。另一个可以检查的是事件查看器查看报表查看器是否有异常,但没有显示?
问题是数据表的名称(在代码中)与数据集的名称(在报告中)不匹配。您的错误给出了您应该使用的名称。试试这个:
private void LoadReport()
{
int R = Convert.ToInt32(label7.Text);
this.reportViewer1.LocalReport.DataSources.Clear();
DataTable dt = new DataTable();
dt = this.NewBillTableAdapter.GetData(R);
//the DataTable name MUST match the name of the corresponding dataset
// (as it is named in the report)
dt.TableName = "10_NewBill";
ReportDataSource rprtDTSource = new ReportDataSource(dt.TableName, dt);
this.reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer1.RefreshReport();
//etc.