gpt4 book ai didi

mysql - 如何将数据行发送到报表查看器中的表格?

转载 作者:行者123 更新时间:2023-11-29 12:47:43 26 4
gpt4 key购买 nike

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

  • 查询 MySQL
  • 在阅读每一行时,将其发送到报告查看器。
  • 在报表查看器中,打印行/行后。追加新行。
  • 转到下一行
  • 从#2 重复直到行尾。

  • 这是我一般想要的。如果有人问我为什么要这样做而不是使用数据集,仅仅是因为我很难找到一个好的教程来教如何在运行时绑定(bind)数据源,包括查询。而且我真的希望这份报告是动态的。另外,为了知识。

    最佳答案

    使用 DataSet 可以很容易地创建这种类型的报告。 .以下说明将指导您创建 MS Report这将有 3 列(其可见性取决于参数)和 10 行。

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

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

    enter image description here

  • 创建后的数据集和报告文件(在解决方案资源管理器中)
  • 包含将在报告中使用的 DataTable 的 DataSet
  • Report内容
  • 将在报告中使用的数据集的列(在报告数据中)
  • List data region这将使行显示在另一个下方


  • 脚步

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

    enter image description here

    enter image description here

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

    enter image description here

    enter image description here

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

    在解决方案资源管理器中双击 DataSet1.xsd 并通过右键单击 DataSet1 内容 → 添加 → 数据表在其中添加一个新的数据表。

    enter image description here

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

    enter image description here

    将列的名称重命名为 Column1 并创建 2 个其他列(Column2、Column3)。

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

    enter image description here

    在 Report Data 窗口内(使用 Ctrl+Alt+D 显示),右键单击 Datasets → Add Dataset。在将出现的窗口中有一个数据源 ComboBox,将其更改为 DataSet1,然后按 OK。

    enter image description here

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

    enter image description here

    enter image description here

    从 List 区域内的 Report Data Window 拖放 3 列中的每一列。

    enter image description here

    现在,由于我们有了报表的基本结构,我们将添加列的规则。首先,我们将根据它创建参数,列将显示或隐藏。右键单击报告数据窗口内的参数 → 添加参数。在将出现的窗口中,将 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并按 OK。

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

    enter image description here

    enter image description here

    enter image description here

    通过设置以下表达式对其他 2 列重复上一步,对于 column2 =Parameters!Parameter1.Value < 2对于第 3 列 =Parameters!Parameter1.Value < 3
    从解决方案资源管理器中双击 Form1.vb,然后从工具箱窗口中拖放表单上的以下控件。 Reporting → ReportViewer(不为其指定报告)、Common Controls → Command Button、ComboBox 和 Label。通过按 F7 进入代码 View (在选择表单时工作)。

    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

    关于mysql - 如何将数据行发送到报表查看器中的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226342/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com