我正在使用VS 2013
及其报告查看器。我想制作一个不限于一个sql语句或一个用途的报告。我有一个想法是像listview
一样对待它。首先从MySQL
获取数据,然后一次读取一行并将其发送到表中。但在报表查看器中,它要求我有一个数据集/源。我很确定我不应该使用文本框,因为它们不会根据记录的数量“增长”或“缩小”。如果我必须制作一个算法,那就像这样。
这是我一般想要的。如果有人问我为什么要这样做而不是使用数据集,只是因为我很难找到一个很好的教程,教导如何在运行时绑定数据源,包括查询。我真的希望这份报告是动态的。另外,出于知识的缘故。
答案 0 :(得分:1)
使用DataSet可以非常轻松地创建此类报告。以下说明将指导您创建一个{3}},其中包含3列(根据参数具有可见性)和10行。
这将为您提供基本概念。然后可以基于与您将使用的MS Report无关的SQL查询生成DataSet。
这是将要使用的基本组件的图表。
创建一个新的Windows窗体应用程序。
在解决方案资源管理器中,右键单击→添加→新项,从出现的窗口中选择数据→数据集,然后按添加。
重复相同的操作,但这次添加报告→报告。
双击解决方案资源管理器中的DataSet1.xsd,右键单击DataSet1内容→添加→DataTable,在那里添加一个新的DataTable。
右键单击DataSet内的DataTable并添加→列。
将列名重命名为Column1,并创建其他2列(Column2,Column3)。
从解决方案资源管理器中双击Report1.rdlc,以便它进入编辑器。在内部编辑器中右键单击→插入页眉,然后重复页面页脚。
在“报告数据”窗口内(显示 Ctrl + Alt + D ),右键单击“数据集”→“添加数据集”。在将出现的窗口上有一个数据源ComboBox,将其更改为DataSet1并按OK。
在编辑器中→右键单击报告的中间部分(正文)→插入→列表。将其塑造,使其类似于上图所示的区域。您还可以设置标题,正文和页脚的高度和宽度。
从“列表”区域内的“报表数据窗口”中拖放3列中的每一列。
现在,由于我们有报告的基本结构,我们将添加列的规则。首先,我们将创建参数,列将显示或隐藏。右键单击Report Data Window里面的Parameters→Add参数。从将出现的窗口中,将Parameter重命名为Parameter1,将其DataType更改为integer,然后按OK。
右键单击列表区域内的Column1→文本框属性。从将出现的窗口中,选择可见性→启用基于表达式显示或隐藏→单击fx按钮。在新窗口中,选择Category树中的Parameters→双击Values中的Parameter1。将显示=Parameters!Parameter1.Value
之类的表达式,将其更改为=Parameters!Parameter1.Value < 1
并按“确定”。
当Parameter1的值小于1时,此表达式将使Column1隐藏,否则将显示。
为column2 =Parameters!Parameter1.Value < 2
和column3 =Parameters!Parameter1.Value < 3
双击解决方案资源管理器中的Form1.vb,然后从工具箱窗口拖放窗体上的以下控件。报告→ReportViewer(未指定报告),公共控件→命令按钮,组合框和标签。按F7键进入代码视图内部(在选择表单时有效)。
用以下内容替换现有代码:
Imports Microsoft.Reporting.WinForms
Public Class Form1
Dim DataTable1 As New DataSet1.DataTable1DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ConfigureControls()
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
PreviewData()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
DataTable1.Dispose()
ReportViewer1.Dispose()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
PreviewData()
End Sub
Private Sub PreviewData()
DataTable1.Clear()
Dim i As Integer
'Fills the DataTable with test data (10 rows, 3 columns)'
For i = 0 To 9
DataTable1.Rows.Add(DataTable1.NewRow)
DataTable1.Rows(i).Item("Column1") = "Row" & CStr(i + 1) & " Column1"
DataTable1.Rows(i).Item("Column2") = "Row" & CStr(i + 1) & " Column2"
DataTable1.Rows(i).Item("Column3") = "Row" & CStr(i + 1) & " Column3"
Next
Dim ReportDataSource1 As New ReportDataSource("DataSet1", CType(DataTable1, DataTable))
ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
ReportViewer1.LocalReport.SetParameters(New ReportParameter("Parameter1", Convert.ToByte(ComboBox1.SelectedItem)))
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(ReportDataSource1)
ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
ReportViewer1.RefreshReport()
End Sub
Private Sub ConfigureControls()
Me.Size = New Size(575, 450)
Me.Location = New Point((Screen.PrimaryScreen.WorkingArea.Width - Me.Width) / 2,
(Screen.PrimaryScreen.WorkingArea.Height - Me.Height) / 2)
ReportViewer1.Location = New Point(12, 12)
ReportViewer1.Size = New Size(535, 358)
ReportViewer1.Anchor = AnchorStyles.Right Or AnchorStyles.Bottom Or
AnchorStyles.Left Or AnchorStyles.Top
Button1.Location = New Point(459, 377)
Button1.Size = New Size(88, 28)
Button1.Text = "Preview"
Button1.Anchor = AnchorStyles.Right Or AnchorStyles.Bottom
ComboBox1.Location = New Point(365, 381)
ComboBox1.Size = New Size(78, 21)
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.Items.AddRange({"3", "2", "1"})
ComboBox1.SelectedIndex = 0
ComboBox1.Anchor = AnchorStyles.Right Or AnchorStyles.Bottom
Label1.Location = New Point(232, 385)
Label1.Size = New Size(131, 13)
Label1.Text = "Hide columns greater than"
Label1.Anchor = AnchorStyles.Right Or AnchorStyles.Bottom
End Sub
End Class
按F5运行代码并在更改ComboBox值时检查其行为并点击预览。