带参数的 C# ReportViewer 本地报表

2024-04-15

大家下午好,

过去 2 周的大部分时间我都在寻求有关 C# WinForm 应用程序问题的帮助。

我有一个表单,其中有一个 DataGridView 显示从数据库中提取的详细信息。当用户双击该网格中的一行时,代码从 CustomerID 列中获取值,将其放入静态公共字符串中,然后打开另一个具有报表查看器的表单。

然后我想做的是让报表查看器使用 CustomerID 作为参数来运行报表。

到目前为止,我所做的就是让它声明报告定义尚未指定。

我的 SQL 服务器是一台没有 SSRS 的旧服务器,由于更改请求问题,我无法安装它,所以我必须使用本地报告,而不是服务器报告。

我创建报告的方法是转到 Visual Studio 中的解决方案资源管理器,然后转到“添加”-“新项目”-“报告”,然后提供数据集和参数。我将该报告放在一个名为“Reports”的子文件夹中,该子文件夹位于解决方案中所有表单的旁边。

我的报告查看器表单的代码如下。别笑太多,我是100%自学的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;
using System.Data.SqlClient;

namespace FormsApp
{
public partial class ReportGenerator : Form
{
    public ReportGenerator()
    {
        InitializeComponent();
        this.reportViewer1.RefreshReport();
    }

    private void ReportGenerator_Load(object sender, EventArgs e)
    {
        if (CustomerList.CustomerID!= "")
        {
            this.reportViewer1.ProcessingMode = ProcessingMode.Local;
            this.reportViewer1.LocalReport.ReportPath = "\\Reports\\CustomerDetails.rdlc";
            this.reportViewer1.ShowParameterPrompts = true;
            ReportParameter CustID = new ReportParameter("CustomerID",CustomerList.CustomerID);
            this.reportViewer1.LocalReport.SetParameters(CustID);
        }
        else
        {}

    }
    }
}

我是否错误地使用了 LocalReport?我真的很困惑,这是我需要开始工作的最后一点,然后我的申请就完成了。

任何帮助将不胜感激。

非常感谢

UPDATE

我的代码现在如下所示,遵循各种来源的建议。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;
using System.Data.SqlClient;

namespace FormsApp
{
    public partial class ReportGenerator : Form
    {
    public ReportGenerator()
    {
        InitializeComponent();
        this.reportViewer1.RefreshReport();
    }

    private DataTable getCustomerData()
    {
        SqlConnection con = new SqlConnection(Home.ConString);
        DataSet ds = new DataSet();
        ds.DataSetName = "CustomerListRetrieve";
        string sql = "SELECT * FROM Customers";
        SqlDataAdapter da = new SqlDataAdapter(sql, con);
        da.Fill(ds);
        DataTable dt = ds.Tables[0];
        return dt;
    }

    private void ReportGenerator_Load(object sender, EventArgs e)
    {
        if (CustomerList.CustomerID != "")
        {
            this.reportViewer1.Reset();
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "FormsApp.Reports.CustomerDetails.rdlc";
            ReportDataSource rds = new ReportDataSource("CustomerListRetrieve", getCustomerData());
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(rds);
            ReportParameter CustID= new ReportParameter("CustomerID", CustomerList.CustomerID);
            this.reportViewer1.LocalReport.SetParameters(CustID);
            this.reportViewer1.LocalReport.Refresh();
            ViewButtonClicked();
        }
        else
        {}
    }

    private void ViewButtonClicked(object sender, ReportParametersEventArgs e)
    {
        var SubmittedParameters = e.Parameters.Clone();
        e.Parameters.Clear();
        SubmittedParameters.Where(x => x.Name == "Parametername").FirstOrDefault().Values[0] = "YourValue";
        SubmittedParameters.ToList().ForEach(x => e.Parameters.Add(x));
    }
    private void OnReportChosenFromList()
    {
        reportViewer1.SubmittingParameterValues -= ViewButtonClicked;
        reportViewer1.SubmittingParameterValues += ViewButtonClicked;
    }
  }
}

我根据codingbiz的响应添加了数据源代码。添加此后,我不再收到报告定义错误,只有一个空白窗口reportviewer loaded.

下面的两个方法 - ViewButtonClicked 和 OnReportChosenFromList 是根据 Bernard Walters 的建议添加的。添加此后,我收到 2 个错误,指出:

  1. 错误 1 ​​只有赋值、调用、递增、递减、await 和 new 对象表达式可以用作语句。
  2. Microsoft.Reporting.WinForms.ReportParameterCollection不包含“克隆”的定义,并且没有扩展方法“克隆”...

现在真是难住了。可能错误地实施了建议。


在您拥有 reportViewer1.RefreshReport(); 之前,reportViewer 不会执行操作;这是它在本地或远程运行报告的命令。 每次您希望刷新或初始加载报告时,您都需要此命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带参数的 C# ReportViewer 本地报表 的相关文章

  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 检查字符串列表是否可以链接

    Question 实现一个功能bool chainable vector
  • 如何在Android移动网站中强制使用数字键盘

    我有一个移动网站 它有一些 HTMLinput其中的元素 如下所示
  • CMake:如何标准化路径? [复制]

    这个问题在这里已经有答案了 是否有一种可靠的方法来标准化 CMake 中的路径 例子 Let s assume that an environment variable MY ROOT DIR is set that points to s
  • Windows Phone 8 上“无法安装公司应用程序”

    我为 Windows Phone 8 开发了一个公司应用程序 并完成了所有建议的步骤来设置它进行安装 我拥有 Symantec 代码签名证书 并且已生成应用程序注册令牌和签名的 XAP 并将其托管在 OneDrive 上的公共文件夹中 我使
  • 如何将 UWP StorageFile 转换为 .NET FileInfo?

    现在 UWP 支持 NET Standard 2 0 它可以访问更多 System IO 命名空间 包括Fileinfo https msdn microsoft com en us library system io fileinfo v
  • 在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗?

    我正在为我的一个项目开发一个简单的标签模型 我已经在 Angular 中实现了类似的东西 但我想在 Ember 中尝试一下 型号代码如下 Tag DS Model extend name DS attr string user DS bel
  • Amazon s3 putObject 标记不起作用

    我正在尝试使用 putObject 方法上传到 Amazon s3 时添加标签 根据文档 我已将标签创建为字符串类型 我的文件已上传到 Amazon s3 但我无法使用提供的标签数据查看文件对象的对象级别标签 根据文档遵循以下代码示例 va
  • 使 td 固定大小(宽度,高度),而其余 td 可以扩展

    您知道如何固定表格中 td 宽度和高度的大小 从而允许表格上的其余 td 根据需要扩展吗 问题是 当 td 内部有数据时 它不会比数据缩小得更多 但如果为空 它会一直缩小 如果扩大窗口 td 也会扩大 我想保留 td 的大小 无论您扩展还是
  • Ruby 中的“+=”(加等于)是什么意思? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 本地化 Spring Boot 验证消息中的消息参数未解析

    我正在使用构建一个项目春季启动2 1 8 我有spring boot 启动器 web在我的 POM 中 我可以看到 Maven 拉动休眠验证器 6 0 17到类路径上 我的消息位于资源文件夹中 并且它们似乎已正确查找 因此当我更改区域设置时
  • 如何在android中制作文字动画?

    在我的 Android 应用程序中 我试图显示一个 正在加载 文本 该文本每 100 毫秒就会更改一次 每 100 毫秒后就会增加一个点 所以首先它会像 正在加载 再过 100 毫秒 它将变为 正在加载 当变为 正在加载 时 该过程将终止并
  • 菜单栏隐藏时 JMenuItem 加速器不起作用

    这个问题是后续问题这个问题 https stackoverflow com questions 18093773 jmenubar selectionmodel changelistener only fires once 我有一个JMen
  • 如何在 Windows 的 Java 中启用小型转储

    我不断收到并看到此消息 无法写入核心转储 Windows 客户端版本默认不启用小型转储 所以我需要知道 如何在 Java 中启用小型转储 在 Windows 计算机上 可选 一旦获得小型转储 如何解释它 我试图找到这两个问题的答案 但我发现
  • ASP.NET vNext 全局配置访问

    正确 推荐的访问方式是什么config jsonASP NET vNext 中的文件 或存储配置的其他位置 In the Startup类 我像这样设置配置 public class Startup public IConfiguratio
  • 重置本地git仓库

    几天前 我在 Github 上创建了一个存储库 然后按照步骤将我现有的解决方案添加到其中 我不知道我做错了什么 但是经过一些随机的 git add 命令等等之后 我现在在 Windows 的 github 中收到消息 failed to s
  • 字典和对

    在 R 中 我想知道我是否可以有一本字典 在某种意义上像 python 其中我有一对 i j 作为具有相应整数值的键 我还没有看到一种干净或直观的方法来构建它R 我的字典的视觉效果是 1 2 gt 1 1 3 gt 3 1 4 gt 4 1
  • 使用 Django、webpack、reactjs、react-router 解耦前端和后端

    我正在尝试在项目中解耦我的前端和后端 我的前端由以下组成reactjs和路由将完成react router 我的后端如果做成形式Django我计划使用前端对 Django 进行 API ajax 调用 现在我不确定如何让这两端正确地相互通信
  • 屏幕旋转后,findFragmentById() 返回一个片段,即使布局内没有这样的 ID

    我有两种方向的一种布局 1 个横向和 1 个纵向 layout land main xml有两个片段
  • HTML5 音频缓冲区卡住

    我使用 HTML5 webkitAudioContext 使用以下代码获取用户麦克风的实时级别 var liveSource function getLevel var context new webkitAudioContext navi
  • 带参数的 C# ReportViewer 本地报表

    大家下午好 过去 2 周的大部分时间我都在寻求有关 C WinForm 应用程序问题的帮助 我有一个表单 其中有一个 DataGridView 显示从数据库中提取的详细信息 当用户双击该网格中的一行时 代码从 CustomerID 列中获取