首先,我需要创建使用通过TextBox
输入从数据库中选择的报表。如何获取文本框值并根据此TextBox
生成报告?如果我需要使用多个DataSets
来填充我的报告中包含信息的一些表,该怎么做?注意:我使用WPF获取TextBoxes
值,使用Winforms创建reportViewer
。
private void Report_Load(object sender, EventArgs e)
{
DataSet dsr = new DataSet();
_con = new SqlConnection(_strCon);
_adp = new SqlDataAdapter("Select * from tbl_cad",_con);
_adp.Fill(dsr,dsr.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("tbl_cad",dsr.Tables[0]);
this.reportViewer.LocalReport.DataSources.Clear();
this.reportViewer.LocalReport.DataSources.Add(rds);
this.reportViewer.LocalReport.Refresh();
this.reportViewer.RefreshReport();
}
答案 0 :(得分:1)
我正在为报告使用多个dataSource。我在winform上嵌入了一个ReportViewer,并添加了按钮/ textBox / comboBox来传递报告参数。不介意示例是在VB.NET中,但它做的完全相同。在运行完整性检查后,我会将文本框值作为参数传递给您的查询,以确保您不会尝试传递NULL或无效结果(请参阅下面我将我的ComboBox值声明为整数并执行转换只是为了肯定)。
通常我使用数据库值加载ComboBox,并使用一些dateTimePickers,然后在选择参数后执行报告按钮。
Private Sub auditYearButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles auditYearButton.Click
Dim year As Integer = CInt(yearComboBox.Text)
weeklyReportViewer.Clear()
weeklyReportViewer.Reset()
weeklyReportViewer.LocalReport.DataSources.Clear()
Dim eYear As New Microsoft.Reporting.WinForms.ReportParameter("year", CStr(year))
Dim itm As New Microsoft.Reporting.WinForms.ReportDataSource
Dim itm2 As New Microsoft.Reporting.WinForms.ReportDataSource
Dim itm3 As New Microsoft.Reporting.WinForms.ReportDataSource
Dim ta As New DsFSCTableAdapters.v_ConvertTableAdapter
Dim tb As New DsFSCTableAdapters.AllocationTableAdapter
Dim tc As New DsFSCTableAdapters.v_ConvertCommercialTableAdapter
weeklyReportViewer.LocalReport.ReportEmbeddedResource = "MERP.AuditYearAllocationReport.rdlc"
Me.weeklyReportViewer.LocalReport.SetParameters(New Microsoft.Reporting.WinForms.ReportParameter() {eYear})
tb.FillByYear(DsFSC.Allocation, year)
itm2.Name = "DsFSC_Allocation"
itm2.Value = AllocationBindingSource
ta.Fill(DsFSC.v_Convert)
itm.Name = "DsFSC_v_Convert"
itm.Value = v_ConvertBindingSource
tc.Fill(DsFSC.v_ConvertCommercial)
itm3.Name = "DsFSC_v_ConvertCommercial"
itm3.Value = v_ConvertCommercialBindingSource
weeklyReportViewer.LocalReport.DataSources.Add(itm)
weeklyReportViewer.LocalReport.DataSources.Add(itm2)
weeklyReportViewer.LocalReport.DataSources.Add(itm3)
Me.weeklyReportViewer.RefreshReport()
End Sub
如果您需要澄清,请告诉我。
答案 1 :(得分:1)
您可能需要澄清多个DataSet?或者包含单个DataSet的多个表。
使用SQL数据适配器,您可以在单个DataTable而不是DataSet上运行填充,然后将表添加到主数据集,最后将THAT数据集提供给报表。
就像一个例子......
DataSet dsr = new DataSet();
_con = new SqlConnection(_strCon);
_adp = new SqlDataAdapter("Select * from tbl_cad",_con);
DataTable tbl1 = new DataTable();
tbl1.TableName = "TableNameForReport";
_adp.Fill( tbl1 );
_adp = new SqlDataAdapter("Select * from OtherTable",_con);
DataTable tbl2 = new DataTable();
tbl2.TableName = "AnotherTableNameForReport";
_adp.Fill( tbl2 );
dsr.Tables.Add( tbl1 );
dsr.Tables.Add( tbl2 );
现在,您显然可以更改从源数据库获取数据所需的任何查询,但随后将它们全部放入单个DataSet中,它们应该可用于报告的运行。
答案 2 :(得分:-1)
只需根据文本框值的输入重写SQL查询。
_adp = new SqlDataAdapter("Select * from tbl_cad WHERE columnName='"+textBox1.value+"'",_con);