【发布时间】:2015-06-05 16:48:25
【问题描述】:
我有一个应用程序使用本地存储的 RDL 进行所有报告。我有两种形式,一种是包含 TabPageControl 的简单查看器,另一种是用户可以用来选择报表参数的 FLP 控件。我们计划提供 30 多个选项,但目前我们只有大约 5 个(某些报告显示某些选项,其余选项隐藏)。
我遇到的问题是我需要有某种方法来获取他们从列表或集合中选择的选项。我现在使用的方法是
public void AddReportToViewer(string reportName, List<ReportParameter> parameterList = null)
{
TabPage newPage = new TabPage();
ReportViewer reportViewer = new ReportViewer();
newPage.Text = reportName;
newPage.Controls.Add(reportViewer);
tbcReports.TabPages.Add(newPage); //adding the report viewer to page, should do this at the end of the method
reportViewer.Reset();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "MyPath/reportName";
ReportDataSource rds = new ReportDataSource();
//parse parameters to individual objects to use with method calls
int parameterEmployeeID = 0;
int parameterStoreID = 0;
List<int> parameterStoreIDs = null;
DateTime parameterFromDate = DateTime.Now;
DateTime parameterToDate = DateTime.Now;
//Use parameters to get objects, just one here, but we have multiple
List<EmployeeTimeclockReportObjects> timeclock = reportBL.getEmployeeTimeclock(parameterEmployeeID, parameterStoreID, parameterFromDate, parameterToDate);
reportBindingSource.DataSource = timeclock;
rds = new ReportDataSource("TimeclockEntries", reportBindingSource);
reportViewer.LocalReport.DataSources.Add(rds);
reportViewer.RefreshReport();
reportViewer.Dock = DockStyle.Fill;
}
这一切都有效,但这里是我需要帮助的地方
int parameterEmployeeID = 0;
int parameterStoreID = 0;
List<int> parameterStoreIDs = null;
DateTime parameterFromDate = DateTime.Now;
DateTime parameterToDate = DateTime.Now;
我需要从报告参数列表中删除值,以便在数据填充方法中使用它们。例如,我正在做类似...
int parameterEmployeeID = Convert.ToInt32(parameterList[parameterList.FindIndex(x => x.Name == "employeeID")].Values[0]);
但后来我在List<int> parameterStoreIDs 上遇到了问题,因为我无法将 StringCollection 转换为整数列表。
是否有人对 a) 将 StringCollection 转换为整数列表或 b) 除了List<ReportParameters> 之外我可以尝试做的任何其他事情从第二种形式中获取信息有任何建议吗????
【问题讨论】:
-
我对 (b) 有点困惑。如果您不通过报表将值传递到数据源,为什么还需要将参数传递给报表?如果你不这样做,为什么要使用
ReportParameter对象? -
是的,老实说,我不需要使用
ReportParameter对象,它们只是传回可能是列表、整数、字符串或以上所有对象列表的最简单方法,同时。我试图找到一种方法来从一个表单中获取随机对象的集合,并使用它们来填充数据源。 ReportParameters 是我发现的第一个可以用来返回多种对象类型的东西——绝对没有附加到它们 -
您的参数有多动态?你认为 30 人左右会是一段时间内的全部要求吗?因为我认为编写一个具有所有不同参数值(或集合)的属性的参数类可能是你最好的选择。
ReportParameter和类似的可以是任何对象/集合的事情是,您必须整合关于它们是什么以及如何在某处使用它们的智能。如果您创建了一个自定义类,那么您已经完成了一次。 -
我们仍在决定...我们很确定 30 是我们将使用的全部,但同时我想在未来扩展中构建-尽可能的能力。我会考虑这样做 --- 感谢所有帮助!
标签: c# type-conversion rdl