如何在报表查看器中向表中发送数据行?

时间:2014-08-10 07:07:15

标签: mysql vb.net reportviewer

我正在使用VS 2013及其报告查看器。我想制作一个不限于一个sql语句或一个用途的报告。我有一个想法是像listview一样对待它。首先从MySQL获取数据,然后一次读取一行并将其发送到表中。但在报表查看器中,它要求我有一个数据集/源。我很确定我不应该使用文本框,因为它们不会根据记录的数量“增长”或“缩小”。如果我必须制作一个算法,那就像这样。

  1. 查询MySQL
  2. 在阅读每一行时,将其发送给报告查看器。
  3. 在报表查看器中,打印行/行后。添加新行。
  4. 转到下一行
  5. 从#2重复到行尾。
  6. 这是我一般想要的。如果有人问我为什么要这样做而不是使用数据集,只是因为我很难找到一个很好的教程,教导如何在运行时绑定数据源,包括查询。我真的希望这份报告是动态的。另外,出于知识的缘故。

1 个答案:

答案 0 :(得分:1)

使用DataSet可以非常轻松地创建此类报告。以下说明将指导您创建一个{3}},其中包含3列(根据参数具有可见性)和10行。

这将为您提供基本概念。然后可以基于与您将使用的MS Report无关的SQL查询生成DataSet。

这是将要使用的基本组件的图表。


enter image description here


  1. 创建后的DataSet和Report文件(在解决方案资源管理器中)
  2. 包含将在报告
  3. 上使用的DataTable的DataSet
  4. DBMS内容
  5. 将在报告上使用的DataSet列(在报告数据中)
  6. Report将使行显示另一个

  7. 步骤

    创建一个新的Windows窗体应用程序。

    enter image description here

    enter image description here

    在解决方案资源管理器中,右键单击→添加→新项,从出现的窗口中选择数据→数据集,然后按添加。

    enter image description here

    enter image description here

    重复相同的操作,但这次添加报告→报告。

    双击解决方案资源管理器中的DataSet1.xsd,右键单击DataSet1内容→添加→DataTable,在那里添加一个新的DataTable。

    enter image description here

    右键单击DataSet内的DataTable并添加→列。

    enter image description here

    将列名重命名为Column1,并创建其他2列(Column2,Column3)。

    从解决方案资源管理器中双击Report1.rdlc,以便它进入编辑器。在内部编辑器中右键单击→插入页眉,然后重复页面页脚。

    enter image description here

    在“报告数据”窗口内(显示 Ctrl + Alt + D ),右键单击“数据集”→“添加数据集”。在将出现的窗口上有一个数据源ComboBox,将其更改为DataSet1并按OK。

    enter image description here

    在编辑器中→右键单击报告的中间部分(正文)→插入→列表。将其塑造,使其类似于上图所示的区域。您还可以设置标题,正文和页脚的高度和宽度。

    enter image description here

    enter image description here

    从“列表”区域内的“报表数据窗口”中拖放3列中的每一列。

    enter image description here

    现在,由于我们有报告的基本结构,我们将添加列的规则。首先,我们将创建参数,列将显示或隐藏。右键单击Report Data Window里面的Parameters→Add参数。从将出现的窗口中,将Parameter重命名为Parameter1,将其DataType更改为integer,然后按OK。

    enter image description here

    enter image description here

    右键单击列表区域内的Column1→文本框属性。从将出现的窗口中,选择可见性→启用基于表达式显示或隐藏→单击fx按钮。在新窗口中,选择Category树中的Parameters→双击Values中的Parameter1。将显示=Parameters!Parameter1.Value之类的表达式,将其更改为=Parameters!Parameter1.Value < 1并按“确定”。

    当Parameter1的值小于1时,此表达式将使Column1隐藏,否则将显示。

    enter image description here

    enter image description here

    enter image description here

    为column2 =Parameters!Parameter1.Value < 2和column3 =Parameters!Parameter1.Value < 3

    设置以下表达式,为其他2列重复上一步

    双击解决方案资源管理器中的Form1.vb,然后从工具箱窗口拖放窗体上的以下控件。报告→ReportViewer(未指定报告),公共控件→命令按钮,组合框和标签。按F7键进入代码视图内部(在选择表单时有效)。

    enter image description here

    用以下内容替换现有代码:

    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值时检查其行为并点击预览。

    enter code here