Stimulsoft Reports.Net开发者常见Q&A——数据连接

发布时间 : 2015-12-08 10:16:40.000|阅读 3224 次

概述:这部分主要提供一些Stimulsoft Reports.Net中开发者在数据连接时常遇到的问题及解决方案。

相关链接:

这部分主要提供一些在Stimulsoft Reports.Net中,开发者在数据连接时常遇到的问题及解决方案。

< 立即下载Stimulsoft Reports.Net v2018.2.3最新版本>

1.怎么修改数据库连接?

在渲染报表前使用以下代码:

C#

//清除数据库列表
report.Dictionary.Databases.Clear();
//添加数据库并指定其名称和连接字符串
report.Dictionary.Databases.Add(new StiSqlDatabase("Test",
"MyDataConnectionString"));

VB

'清除数据库列表
Report.Dictionary.Databases.Clear()
'添加数据库并指定其名称和连接字符串
Report.Dictionary.Databases.Add(new StiSqlDatabase("Test",
"MyDataConnectionString"))

2.怎么访问原始列数据?

使用数据源索引器。示例:

C#

object data = Customers["Phone"];

VB

Dim Data As Object = Customers("Phone")

3.怎么在渲染报表时修改查询的文本?

你可以使用报表参数来实现。默认情况下报表引擎不支持将参数作为一个标准的查询点。例如下面这个查询语句:

select * from customers where code = :code

在这种情况下你无法检测:code的值。然而你可以使用链接到报表变量的表达式形成SQL查询的任何一部分。例如:

select * from customers where code = {myvariable}
select * from customers where {myvariable}
select * from customers {myvariable}
select * from {myvariable} where code=1
select {myvariable} from customers where code = {myvariable}
{myvariable}
select * from customers where code = {MyStaticClass.GetCondition()}
select * from customers where {Datasource.Condition}
select {myvar+myvar2} from customers

4.是否需要注册报表的数据集?

如果所有的数据都被同一个报表采集,如果你使用SQL查询,那就没必要使用RegData方法。

5.怎么给SQL查询添加一个参数?

你需要在数据源中创建一个参数,在SQL查询中写入:

select * from customers where customerid=@customerid

然后初始化该参数。在代码中初始化方法如下:

C#

StiReport report = new StiReport();
report.RegData(myDataset);
report.Compile();
report["@customerid"] = 1;

VB

Dim Report As StiReport = New StiReport()
Report.RegData(MyDataSet)
Report.Item("@customerid") = 1

6.怎么在服务器上渲染报表并发送到客户端?

首先在服务器上生成报表,并将渲染的报表保存到流中:

C#

StiReport report = new StiReport();
report.RegData(dataSet);
report.Render(false);
report.SaveDocument(stream);

VB

Dim Stream As New MemoryStream
Dim Report As New StiReport
Report.RegData(DataSet)
Report.Render(False)
Report.SaveDocument(Stream)

在客户端从流中加载渲染后的报表并设置以下数据:

C#

StiReport report = new StiReport();
report.LoadDocument(stream);
report.Show();

VB

Dim Report As New StiReport
Report.LoadDocument(stream)
Report.Show()

7.怎么显示存储在数据库或服务器上的图像?

实现方法很多,如下:

使用属性

  • Image.DataColumn属性-从数据库加载图像
  • Image.File属性-从文件加载图像
  • Image.ImageURL属性-直接指定图像的存储路径

使用事件

  • 从文件加载图像
    Image1.Image = Image.FromFile("Image1.gif");
  • 从URL加载图像
    Image1.Image = Stimulsoft.Base.Drawing.StiImageFromURL.LoadBitmap(
    "http://www.domain.com/bitmap.gif");
    

8.怎么在运行时修改报表的连接字符串?

可以使用以下代码实现:

C#

StiReport report = new StiReport();
report.Load("MyReport.mrt");
report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(new StiSqlDatabase("MyDatabase", "new connection string"));

VB

Dim Report As New StiReport
Report.Load("MyReport.mrt")
Report.Dictionary.Databases.Clear()
Report.Dictionary.Databases.Add(New StiSqlDatabase("MyDatabase", "new connection string"))

9.怎么从应用程序里传递SQL查询参数?

你可以使用表达式形成SQL查询的任何部分。首先,在报表字典里创建一个变量,然后将该变量添加到SQL查询中:
select * from customers where code = {myvariable}

最后,在运行报表前初始化该变量:

C#

StiReport report = new StiReport();
rreport.Load("Variables.mrt");
report.Compile();
//设置变量
report["myvariable"] = 123;
report.Render();

VB

Dim Report As StiReport = New StiReport()
Report.Load("Variables.mrt")
Report.Compile()
'设置变量
Report.Item("myvariable") = " Value "
Report.Render()

10.怎么检查空值?

你可以在GetValueEvent中使用以下代码来实现:

C#

if (Customers["Flag"] == null)e.Value = "YES";
else e.Value = "NO";

VB

If (Customers("Flag") Is Nothing) Then
e.Value = "YES"
Else
e.Value = "NO"
End If

使用IIF函数也同样可以实现:

C#

{IIF(Customers["Flag"] == null, "YES", "NO")}

VB

{IIF(Customers("Flag") Is Nothing, "YES", "NO")}

11.怎么跨数据集渲染主详报表?

这种情况下你需要将所有数据缓存到一个DataSet里。在报表字典里将CacheAllData属性值设置为true即可实现。

购买最新正版授权!详情请"咨询在线客服"


在线
客服
微信
QQ 电话
023-68661681
返回
顶部