彩票走势图

彩票走势图 > 慧问 > 频道

Stimulsoft Reports.Net开发者常见问题解答

发表于2021-07-21 回复:1 查看:4900  |  

1.如何修改数据的排序?

代码如下:

DataBand1.Sort = new string[2]
{
"ASC",
"Name"
};

2.如何得到一个组件的实际尺寸大小?

使用StiComponent.GetActualSize方法,该方法返回组件的尺寸。但是,请注意,如果你想要该方法返回CanGrow属性的正确数据,CanShrink和AutoWidth属性必须设置为true。

3.怎么通过组件的名称查找组件?

代码如下:

C#

StiComponent component = report.GetComponentByName("ComponentName");

VB

Dim Component As StiComponent = Report.GetComponentByName("ComponentName");  

4.怎么获取或设置文本为rtf组件的rtf格式?

使用StiRichText.RtfText属性。

5.怎么用代码给组件添加书签?

使用以下代码:

component.Bookmark = "{Categories.CategoryName}";

6.Text和TextValue之间的区别是什么?

Text属性中的文本表达式在报表渲染时被计算、被保存,将计算出一个结果值后会放置在TextValue中。换句话说就是你可以指定表达式。示例如下:

text1.Text = "Phone: {Customers.Phone}";

在TextValue中,你只可以指定字符串:

text1.TextValue = "123";

如果Text和TextValue一块被指定,那么TextValue输出将会被使用。

7.我应该在图像的DataColumn字段指定什么?

在该字段你需要指定数据源和数据列。示例如下:
Customers.Photo

注意不能放括号。你也可以通过链接进行调用。如下:
Products.Customers.Photo

8.怎么从路径加载保存在数据库中的图像?

使用BeforePrintEvent事件,在事件中指定以下代码:

C#

Image1.Image = Image.FromFile(MyDataSource.ImagePath);

VB

Image1.Image = Image.FromFile(MyDataSource.ImagePath)

你还可以使用ImageData属性:

C#

{Image.FromFile(MyDataSource.ImagePath)}

VB

{Image.FromFile(MyDataSource.ImagePath)}

9.如何给Form上的ComboBox绑定数据?

  1. 指定DataBindings属性;
  2. 通过以下代码初始化ComboBox
    ComboBox comboBox = ReportComboBox.Control;
  3. 在FormLoad事件中填充组合框:
    ReportComboBox.Items.Add("123");

10.怎么访问报表的代码文本?

使用StiReport类的Script属性。该属性包含报表的代码文本。

11.怎么将报表生成一份新的代码?

使用StiReport类的ScriptNew方法。代码如下:

C#

StiReport report = new StiReport();
report.ScriptNew();

VB

Dim Report As StiReport = New StiReport()
Report.ScriptNew()

12.怎么更新报表的代码?

使用StiReport类的ScriptUpdate方法来更新报表的代码。方法如下:

C#

StiReport report = new StiReport();
report.ScriptUpdate();

VB

Dim Report As StiReport = New StiReport()
Report.ScriptUpdate()

需注意的是,在报表编译前,报表代码会自动更新。因此没必要调ScriptUpdate方法。

13.如何在报表中使用自定义程序集?

确保属性窗口可见并且选中(按F4键一次或两次或通过菜单“View” -> “Properties”)。在属性窗口中选择组合框中最上面的项目(例如:“MyReport:Report”),将会出现“Referenced Assemblies“属性,点击[…]按钮编辑其值。添加你的程序集,点击[OK]按钮。现在你就可以使用报表代码中自定义程序集中的功能了。

14.怎么从一个报表访问我的应用程序中的对象?

步骤如下:

  1. 你需要添加你应用程序的相关程序集,在报表的ReferencedAssemblies属性中添加。
  2. 然后描述包含报表类中数据的字段。如果你想在没有完整字段路径的情况下描述字段,那么你还需要添加你的类型的命名空间。
  3. 在报表渲染前初始化描述的字段。

C#

StiReport report = new StiReport();
report.Load("report.xml");
//Compile the report first
report.Compile();
//Initialize the field in a report
report.CompiledReport["Parameters"] = OurParameters;
report.Render();

VB

Dim Report As StiReport = New StiReport()
Report.Load("report.xml")
'Compile the report first
Report.Compile()
'Initialize the field in a report
Report.CompiledReport("Parameters") = OurParameters
Report.Render()

在上面的步骤都完成后你就可以从脚本中访问你的应用程序字段了。示例:
{Parameters.SomeParameter}

15.怎么处理名称为C#关键字的列?

在列名称前添加一个@符号,示例:@class

16.怎么从一个URL加载图像?

使用下面的代码加载Bitmap格式的图像:

Image1.Image = Stimulsoft.Base.Drawing.StiImageFromURL.LoadBitmap("//www.domain.com/bitmap.gif");  

使用下面的代码加载Metafile格式的图像:

Image1.Image = Stimulsoft.Base.Drawing.StiImageFromURL.LoadMetafile("//www.domain.com/bitmap.emf");

你还可以使用图像组件的ImageURL属性。

17.如何查找已加载报表的文件名称?

你可以从ReportFile属性获取以前的文件路径。示例如下:

string path = report.ReportFile;

18.怎么在预览中修改CheckBox的值?

使用一种可以在预览报表时通过点击事件实现在预览窗口添加一些X标记的功能。

使用CheckStyle = Cross用于X标记,然后编写ClickEvent事件处理器:

C#

Stimulsoft.Report.Components.StiCheckBox check = sender as
Stimulsoft.Report.Components.StiCheckBox;
if (check.CheckedValue == null || ((bool)check.CheckedValue) == false)check.CheckedValue = true;
else check.CheckedValue = false;
Invalidate();

VB

Dim box1 As Stimulsoft.Report.Components.StiCheckBox = CType(sender,
Stimulsoft.Report.Components.StiCheckBox)
If ((box1.CheckedValue Is Nothing) OrElse Not CType(box1.CheckedValue, Boolean)) Then
box1.CheckedValue = True
Else
box1.CheckedValue = False
End If
MyBase.Invalidate

19.怎么修改页码?

你只需要分配系统变量PageNumber的值即可,例:

PageNumber = 1;

同样你还可以使用ResetPageNumber属性。

20.有什么方法实现在第二页的数据带打印标题吗?

你可以使用BeforePrintEvent,代码如下:

C#

if (PageNumber == 1)HeaderBand1.Enabled = false;
else HeaderBand1.Enabled = true;

VB

If (MyBase.PageNumber = 1) Then
Me.HeaderBand1.Enabled = False
Else
Me.HeaderBand1.Enabled = True
End If

21.怎么处理重复值?

Stimulsoft

ProcessingDuplicates属性有以下值:

  • ProcessingDuplicates=Merge—合并重复值
  • ProcessingDuplicates=None—重复值不作任何处理
  • ProcessingDuplicates=Hide—只输出重复值的第一个字符串

22.怎么给事件添加事件处理器?

  1. 在你调用Show后,报表引擎会自动调用Compile方法并创建一个新的报表-report.CompiledReport.
    使用一下代码添加事件处理器:
    C#
    report.Compile();
    report.CompiledReport.GetComponents()["ComponentName"].BeforePrint += new
    EventHandler(Component_BeforePrint);
    report.Show();
    VB
    Report.Compile()
    AddHandler Report.CompiledReport.GetComponents.Item("ComponentName").BeforePrint, New
    EventHandler(AddressOf Me.Component_BeforePrint)
    Report.Show()
    该代码的处理器处理编译过的报表的事件。
  2. 你可以直接设置事件脚本:
    C#
    component.BeforePrintEvent.Script = "MessageBox.Show(\"test\")";
    VB
    Component.BeforePrintEvent.Script = "MessageBox.Show(""test"")"
    你可以指定事件的脚本,在报表编译后脚本就会生成一个事件处理器。

23.怎么访问报表的页面?

报表的页面存储在报表的Pages集中。示例如下:

C#

//Returns the first page of a report
StiPage page = report.Pages[0];

VB

'Returns the first page of a report
Dim Page As StiPage = Report.Pages(0)

24.如何在不打印的情况下获取一个数据带的总和?

你需要将数据带的高度减小为0。

25.如何在Expression的基础上对数据进行排序?

通常你需要在表达式的基础上对数据进行排序。计算的结果取决于数据源中的一些字段。例如你已经有一些通过字符串表示的数字,如果不将这些字符串数据源转换为数字格式就进行排序,那么数据源中的数字顺序将不被编译成数字的自然顺序。数字有不同的精度并且被排序为字符串:

1000
20
300

如果更改列的字符串类型为数值型,那么就会被正确排序。但是,如何在不改变数据源类型的情况下进行排序呢?为此,你可以使用Expression作为排序的条件。

{int.Parse(MyDataSource.MyColumn)}

因为不能指定表达式作为排序的条件,那么你需要使用下面的技巧。

将你的排序修改为分组。指定表达式(见下文)作为分组的条件用于分类,将GroupHeaderBnd的高度设置为0。

Stimulsoft

以上所有步骤都完成后,字符串就会被正确的排序啦。

20
300
1000

注意:在表达式中你可以使用表中的任何行进行排序。

26.交叉报表通过3张表渲染?

让我们看看下面的任务。例如,我们需要通过3个表渲染报表:Categories、Products、Order_Details。

我们必须在报告中获取下一个表—通过Products字符串,按Categories列。Order_Details中的行/列交叉点将要被输出。 Order_Details利用关系与Categories和Products表关联。
放置DataBand到页面上,然后是Products数据源。将CrossTab放置到DataBand并显示Categories的数据源。在CrossBand放置StiText并显示Order_Details的字段。滚动Order_Details到需要给StiText组件的OnBeforePrint添加处理程序的行。

Order_Details.First();
while (!Order_Details.IsEof)
{
if (Order_Details.OrderID == Categories.CategoryID && Order_Details.OrderID == Products.ProductID)
break;
Order_Details.Next();
}

为什么Order_Details不能通过与Products和Categories已存在的相关性自动滚动到该行?因为数据源被滚动时与Databand相关。因为很多的相关性因此不能在Delphi中滚动。

这种情况下最好的方法是—一个大SQL查询和一个交叉表。或者是放置在Databand中的一个稍小一点的查询。

27.GetValue事件处理器的RichText组件中的文本格式化相关的问题?

有时你需要格式化RichTextBox对象中的RTF文本。你可以使用的GetValue事件处理程序。对于此操作,你需要创建StiRichText组件。具体代码如下:

C#

// Create auxiliary StiRichTextBox object
StiRichTextBox rich = new StiRichTextBox();
// rtf-text unpacking
rich.Rtf = StiRichText.UnpackRtf(System.Xml.XmlConvert.DecodeName(e.Value));
//Select rtf range
//Select area of a text for using formatting to it
rich.SelectionStart = 0;
rich.SelectionLength = 9;
//Using lowercase to selected text
rich.SelectionCharOffset = -5;
// Selected text with center alignment
rich.SelectionAlignment = StiRtfSelectionAlign.Center;
// Set the color of the selected text
rich.SelectionColor = Color.Red;
// Set the font for selected text
rich.SelectionFont = new Font("Arial", 20, FontStyle.Bold);
rich.SelectionStart = 9;
rich.SelectionLength = 3;
rich.SelectionFont = new Font("Arial", 25);
rich.SelectionColor = Color.Blue;
rich.SelectionStart = 12;
rich.SelectionLength = 11;
rich.SelectionFont = new Font("Arial", 20, FontStyle.Bold);
//Set selected text in uppercase
rich.SelectionCharOffset = 10;
// Rtf text packing
e.Value = System.Xml.XmlConvert.EncodeName(StiRichText.PackRtf(rich.Rtf));
// Release of resources of additional component
rich.Dispose();

VB

Dim box1 As New StiRichTextBox
box1.Rtf = StiRichText.UnpackRtf(System.Xml.XmlConvert.DecodeName(e.Value))
box1.SelectionStart = 0
box1.SelectionLength = 9
box1.SelectionCharOffset = -5
box1.SelectionAlignment = StiRtfSelectionAlign.Center
box1.SelectionColor = Color.Red
box1.SelectionFont = New Font("Arial", 20, FontStyle.Bold)
box1.SelectionStart = 9
box1.SelectionLength = 3
box1.SelectionFont = New Font("Arial", 25)
box1.SelectionColor = Color.Blue
box1.SelectionStart = 12
box1.SelectionLength = 11
box1.SelectionFont = New Font("Arial", 20, FontStyle.Bold)
box1.SelectionCharOffset = 10
e.Value = System.Xml.XmlConvert.EncodeName(StiRichText.PackRtf(box1.Rtf))
box1.Dispose

下图显示在StiRichText组件创建之前,GetValue处理器设置之后:

Stimulsoft

RichText组件的属性如下表:

属性功能
SelectionAlignment控制RTF的文本对齐。
SelectionHangingIndent设置SelectionHangingIndent属性来表示文本段落中的第一行的左边缘和在同一段落后续行的左边缘之间的像素间距的整数。
SelectionIndent整数值。设置在控制的左边缘与文本的左边缘之间的像素间距。设置SelectionHangingIndent属性来表示文本段落中的第一行的左边缘和在 同一段落后续行的左边缘之间的像素间距的整数。SelectionHangingIndent属性的值仅适用于第一行下面环绕的段落行。
SelectionRightIndent将SelectionRightIndent属性设置为整数代表在控制的右边缘与文本的右边缘之间的像素间距。

28.如何使用RichText输出RTF格式的文本?

在RichText的GetValueEvent事件写入以下代码:

C#

System.IO.StreamReader reader = new System.IO.StreamReader("d:\\script.rtf");
string str = reader.ReadToEnd();
reader.Close();
e.Value = System.Xml.XmlConvert.EncodeName(StiRichText.PackRtf(str));

VB

Dim Reader As System.IO.StreamReader = New System.IO.StreamReader("d:\\script.rtf")
Dim Str As String = Reader.ReadToEnd()
Reader.Close()
e.Value = System.Xml.XmlConvert.EncodeName(StiRichText.PackRtf(Str))

29.Stimulsoft DLL支持模糊或嵌入吗?

Stimulsoft DLL不支持模糊或嵌入。

30.怎么添加一个目录表到多页报表?

一个多页的报告可能会很长,通常需要一个目录表,让读者很容易寻找信息。不幸的是目录表的页码是未知的,直到报表已经被渲染,因此这是一个相当复杂的任务。但是,使用变量和Stimulsoft Reports的页面BeginRender、EndRender事件是完全可能实现这样的自动目录表的:

Stimulsoft

使用这种方法目录对应的页码将根据报表的页码自动计算——如果一个页面扩展到多页,那么页码会自动调整以显示每个章节的正确起始页。一旦你创建你的目录页,并添加必要的文字组件,那么你的报表生成该功能的步骤如下:

创建一个Flag变量

第一步是在报表字典中创建一个名为'flag'的布尔变量:

Stimulsoft

该标志将被用于跟踪一个页面锚是否应该被添加到当前页面。

注意: 该变量名是不是强制性的,你可以根据自己的需求进行修改。

设置标签

设置用于输出页码的每个文本组件的Tag属性(位于对象检查Interaction的下方)为显示在目录表的名称。在上面的例子中第一页包含“DirectorsOfficersAndAdvisers',因此这将是其标签值。重复此过程,每增加一页,被列入目录表中。

设置文本表达式

为了在目录表中获得相应的页码,我们将使用GetAnchorPageNumber方法的文本表达式。将每一个输出页码的文本组件设置表达式:

{GetAnchorPageNumber(sender.TagValue)}

与设置标记时不同,你可以为每个文本组件使用完全相同的表达式。

给BeginRender事件添加代码

通过点击对象检查中事件旁边的省略号为每个页面打开用于BeginRender的事件编辑器,然后添加如下代码:

Stimulsoft

为报告中的每个页面添加相同的代码,只是AddAnchor调用应进行修改,以便在每种情况下将相关页面的名称显示为参数。

给EndRender事件添加代码

通过点击对象检查中事件旁边的省略号为每个页面打开用于EndRender的事件编辑器,然后添加如下代码:

flag = true;

同样你可以为每一个页面使用相同的表达式。现在你就可以打印或预览报表,并且目录表的页码将会被正确的计算。

0个回答

打破零回复...

回复

登录 慧都网发表评论

扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP