设计时数据源转运行时数据源
本帖最后由 Lenka.Guo 于 2018-8-29 09:42 编辑rdl报表,用设计器做设计时数据源,可预览。。然后在通过程序读取PageReport后,怎么转换为运行时数据源,比如读取文件里面的sql语句通过后台查询数据并赋值到报表。
就是报表模板是设计时数据源,但是展示的时候我想转行为运行是数据源,通过后台把模板转行?不知可行不。
运用场景就是设计时在哪儿都可以设计,但是运行的时候可能是公网,就没办法把数据库映射出去。
可以试试,在生成PageReport 对象后,
1. 将报表的dataProvider 更换成DataSetProvider。2. 在 LocateDataSource 中为报表返回数据
代码
var rptPath = new FileInfo(@"..\..\Invoice2.rdlx");
var definition = new PageReport(rptPath);
definition.Report.DataSources.ConnectionProperties.DataProvider = "DATASET";
definition.Document.LocateDataSource += new LocateDataSourceEventHandler(OnLocateDataSource);
void OnLocateDataSource(object sender, LocateDataSourceEventArgs args)
{
args.Data = LoadData();
}
本帖最后由 504385214 于 2018-8-29 11:58 编辑
Lenka.Guo 发表于 2018-8-29 09:40
可以试试,在生成PageReport 对象后,
1. 将报表的dataProvider 更换成DataSetProvider。2. 在 LocateData ...
昨天弄出来了!!但是还有一些小问题!!比如我是多个数据集,已经每个数据集里面都有参数,怎么处理哇??
在OnLocateDataSource里面处理哇??
重点是参数处理。
有没有复杂全面点的例子哇 你是说你有多个数据集,并且每个数据集里都有参数的传递是吧。现在没有对应的demo。
但是你可以通过后台获取参数,如果不知道怎样后台获取参数,你可以参考如下博客:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=48869&extra=page%3D1
KearneyKang 发表于 2018-8-29 14:18
你是说你有多个数据集,并且每个数据集里都有参数的传递是吧。现在没有对应的demo。
但是你可以通过后台 ...
/// <summary>
/// 数据集
/// </summary>
static Dictionary<string, string> set = new Dictionary<string, string>();
public static void ReportPrint_text(string djh)
{
set.Clear();
PageReport pageReport = new PageReport(new System.IO.FileInfo(@"C:\Users\gong\Desktop\运行时数据源.rdlx"));
foreach (var item in pageReport.Report.DataSets)
{
set.Add(item.Name, item.Query.CommandText);
item.Query.CommandText = null;
}
///参数赋值
pageReport.Report.ReportParameters.DefaultValue.Values.Add(djh);
string yymc ="XXXX信息";
pageReport.Report.ReportParameters.DefaultValue.Values.Add(yymc);
///更换数据类型及删除sql语句
pageReport.Report.DataSources.ConnectionProperties.DataProvider = "DATASET";//更换数据类型为dataset
pageReport.Report.DataSources.ConnectionProperties.ConnectString = null;
pageReport.Report.ReportParameters.Clear();
PageDocument pageDocument = new PageDocument(pageReport);
pageDocument.LocateDataSource += new LocateDataSourceEventHandler(locatedata);
pageDocument.Print(true, false, false);
}
private static void locatedata(object sender, LocateDataSourceEventArgs args)
{
foreach (var item in set)
{
if (args.DataSetName == item.Key)
{
string sql = item.Value;
args.Data = returndata(sql);
if (args.Data == null)
{
MessageBox.Show("没有数据可打印!");
return;
}
}
}
}
private static object returndata(string sql)
{
DataTable dt = new DataTable();
dt=///更近sql语句查询datatable结果
return dt;
}
上面代码要报错呢
大神帮忙完整下例子哇。sql语句里面如果有参数怎么处理。 你这是后台绑定动态数据源,参数的操作跟在数据库里的常规操作是一样的。没有特别之处啊 KearneyKang 发表于 2018-8-29 17:28
你这是后台绑定动态数据源,参数的操作跟在数据库里的常规操作是一样的。没有特别之处啊
可以重构参数面板上面的查询报表按钮么? 你是先重现写一个查询按钮。然后通过点击该按钮,数据筛选完成后,再把筛选后的数据绑定给报表。这是完全可行的。报表只做一个战士,具体的数据筛选都是你自己通过按钮触发后来进行筛选 KearneyKang 发表于 2018-8-30 15:01
你是先重现写一个查询按钮。然后通过点击该按钮,数据筛选完成后,再把筛选后的数据绑定给报表。这是完全可 ...
思路有了。
现在是侧边栏默认展开咋设置哇,还有侧边栏默认到参数面板咋设置哇 你是想侧边栏,一只展开,还是。
如果你的参数有默认值侧边栏是不默认显示的,如果侧边栏无值必须输入值,则侧边栏一只显示。
页:
[1]
2