代碼如下:
DataBand1.Sort = new string[2] { "ASC", "Name" };
使用StiComponent.GetActualSize方法,該方法返回組件的尺寸。但是,請(qǐng)注意,如果你想要該方法返回CanGrow屬性的正確數(shù)據(jù),CanShrink和AutoWidth屬性必須設(shè)置為true。
代碼如下:
C#
StiComponent component = report.GetComponentByName("ComponentName");
VB
Dim Component As StiComponent = Report.GetComponentByName("ComponentName");
使用StiRichText.RtfText屬性。
使用以下代碼:
component.Bookmark = "{Categories.CategoryName}";
Text屬性中的文本表達(dá)式在報(bào)表渲染時(shí)被計(jì)算、被保存,將計(jì)算出一個(gè)結(jié)果值后會(huì)放置在TextValue中。換句話說(shuō)就是你可以指定表達(dá)式。示例如下:
text1.Text = "Phone: {Customers.Phone}";
在TextValue中,你只可以指定字符串:
text1.TextValue = "123";
如果Text和TextValue一塊被指定,那么TextValue輸出將會(huì)被使用。
在該字段你需要指定數(shù)據(jù)源和數(shù)據(jù)列。示例如下:
Customers.Photo
注意不能放括號(hào)。你也可以通過(guò)鏈接進(jìn)行調(diào)用。如下:
Products.Customers.Photo
使用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)}
ComboBox comboBox = ReportComboBox.Control;
ReportComboBox.Items.Add("123");
使用StiReport類(lèi)的Script屬性。該屬性包含報(bào)表的代碼文本。
使用StiReport類(lèi)的ScriptNew方法。代碼如下:
C#
StiReport report = new StiReport(); report.ScriptNew();
VB
Dim Report As StiReport = New StiReport() Report.ScriptNew()
使用StiReport類(lèi)的ScriptUpdate方法來(lái)更新報(bào)表的代碼。方法如下:
C#
StiReport report = new StiReport(); report.ScriptUpdate();
VB
Dim Report As StiReport = New StiReport() Report.ScriptUpdate()
需注意的是,在報(bào)表編譯前,報(bào)表代碼會(huì)自動(dòng)更新。因此沒(méi)必要調(diào)ScriptUpdate方法。
確保屬性窗口可見(jiàn)并且選中(按F4鍵一次或兩次或通過(guò)菜單“View” -> “Properties”)。在屬性窗口中選擇組合框中最上面的項(xiàng)目(例如:“MyReport:Report”),將會(huì)出現(xiàn)“Referenced Assemblies“屬性,點(diǎn)擊[…]按鈕編輯其值。添加你的程序集,點(diǎn)擊[OK]按鈕?,F(xiàn)在你就可以使用報(bào)表代碼中自定義程序集中的功能了。
步驟如下:
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()
在上面的步驟都完成后你就可以從腳本中訪問(wèn)你的應(yīng)用程序字段了。示例:
{Parameters.SomeParameter}
在列名稱(chēng)前添加一個(gè)@符號(hào),示例:@class
使用下面的代碼加載Bitmap格式的圖像:
Image1.Image = Stimulsoft.Base.Drawing.StiImageFromURL.LoadBitmap("http://www.domain.com/bitmap.gif");
使用下面的代碼加載Metafile格式的圖像:
Image1.Image = Stimulsoft.Base.Drawing.StiImageFromURL.LoadMetafile("http://www.domain.com/bitmap.emf");
你還可以使用圖像組件的ImageURL屬性。
你可以從ReportFile屬性獲取以前的文件路徑。示例如下:
string path = report.ReportFile;
使用一種可以在預(yù)覽報(bào)表時(shí)通過(guò)點(diǎn)擊事件實(shí)現(xiàn)在預(yù)覽窗口添加一些X標(biāo)記的功能。
使用CheckStyle = Cross用于X標(biāo)記,然后編寫(xiě)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
你只需要分配系統(tǒng)變量PageNumber的值即可,例:
PageNumber = 1;
同樣你還可以使用ResetPageNumber屬性。
你可以使用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
ProcessingDuplicates屬性有以下值:
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()該代碼的處理器處理編譯過(guò)的報(bào)表的事件。
component.BeforePrintEvent.Script = "MessageBox.Show(\"test\")";VB
Component.BeforePrintEvent.Script = "MessageBox.Show(""test"")"你可以指定事件的腳本,在報(bào)表編譯后腳本就會(huì)生成一個(gè)事件處理器。
報(bào)表的頁(yè)面存儲(chǔ)在報(bào)表的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)
你需要將數(shù)據(jù)帶的高度減小為0。
通常你需要在表達(dá)式的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行排序。計(jì)算的結(jié)果取決于數(shù)據(jù)源中的一些字段。例如你已經(jīng)有一些通過(guò)字符串表示的數(shù)字,如果不將這些字符串?dāng)?shù)據(jù)源轉(zhuǎn)換為數(shù)字格式就進(jìn)行排序,那么數(shù)據(jù)源中的數(shù)字順序?qū)⒉槐痪幾g成數(shù)字的自然順序。數(shù)字有不同的精度并且被排序?yàn)樽址?/p>
1000 20 300
如果更改列的字符串類(lèi)型為數(shù)值型,那么就會(huì)被正確排序。但是,如何在不改變數(shù)據(jù)源類(lèi)型的情況下進(jìn)行排序呢?為此,你可以使用Expression作為排序的條件。
{int.Parse(MyDataSource.MyColumn)}
因?yàn)椴荒苤付ū磉_(dá)式作為排序的條件,那么你需要使用下面的技巧。
將你的排序修改為分組。指定表達(dá)式(見(jiàn)下文)作為分組的條件用于分類(lèi),將GroupHeaderBnd的高度設(shè)置為0。
以上所有步驟都完成后,字符串就會(huì)被正確的排序啦。
20 300 1000
注意:在表達(dá)式中你可以使用表中的任何行進(jìn)行排序。
讓我們看看下面的任務(wù)。例如,我們需要通過(guò)3個(gè)表渲染報(bào)表:Categories、Products、Order_Details。
我們必須在報(bào)告中獲取下一個(gè)表—通過(guò)Products字符串,按Categories列。Order_Details中的行/列交叉點(diǎn)將要被輸出。 Order_Details利用關(guān)系與Categories和Products表關(guān)聯(lián)。
放置DataBand到頁(yè)面上,然后是Products數(shù)據(jù)源。將CrossTab放置到DataBand并顯示Categories的數(shù)據(jù)源。在CrossBand放置StiText并顯示Order_Details的字段。滾動(dòng)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不能通過(guò)與Products和Categories已存在的相關(guān)性自動(dòng)滾動(dòng)到該行?因?yàn)閿?shù)據(jù)源被滾動(dòng)時(shí)與Databand相關(guān)。因?yàn)楹芏嗟南嚓P(guān)性因此不能在Delphi中滾動(dòng)。
這種情況下最好的方法是—一個(gè)大SQL查詢(xún)和一個(gè)交叉表。或者是放置在Databand中的一個(gè)稍小一點(diǎn)的查詢(xún)。
有時(shí)你需要格式化RichTextBox對(duì)象中的RTF文本。你可以使用的GetValue事件處理程序。對(duì)于此操作,你需要?jiǎng)?chuàng)建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組件創(chuàng)建之前,GetValue處理器設(shè)置之后:
RichText組件的屬性如下表:
屬性 | 功能 |
SelectionAlignment | 控制RTF的文本對(duì)齊。 |
SelectionHangingIndent | 設(shè)置SelectionHangingIndent屬性來(lái)表示文本段落中的第一行的左邊緣和在同一段落后續(xù)行的左邊緣之間的像素間距的整數(shù)。 |
SelectionIndent | 整數(shù)值。設(shè)置在控制的左邊緣與文本的左邊緣之間的像素間距。設(shè)置SelectionHangingIndent屬性來(lái)表示文本段落中的第一行的左邊緣和在 同一段落后續(xù)行的左邊緣之間的像素間距的整數(shù)。SelectionHangingIndent屬性的值僅適用于第一行下面環(huán)繞的段落行。 |
SelectionRightIndent | 將SelectionRightIndent屬性設(shè)置為整數(shù)代表在控制的右邊緣與文本的右邊緣之間的像素間距。 |
在RichText的GetValueEvent事件寫(xiě)入以下代碼:
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))
Stimulsoft DLL不支持模糊或嵌入。
一個(gè)多頁(yè)的報(bào)告可能會(huì)很長(zhǎng),通常需要一個(gè)目錄表,讓讀者很容易尋找信息。不幸的是目錄表的頁(yè)碼是未知的,直到報(bào)表已經(jīng)被渲染,因此這是一個(gè)相當(dāng)復(fù)雜的任務(wù)。但是,使用變量和Stimulsoft Reports的頁(yè)面BeginRender、EndRender事件是完全可能實(shí)現(xiàn)這樣的自動(dòng)目錄表的:
使用這種方法目錄對(duì)應(yīng)的頁(yè)碼將根據(jù)報(bào)表的頁(yè)碼自動(dòng)計(jì)算——如果一個(gè)頁(yè)面擴(kuò)展到多頁(yè),那么頁(yè)碼會(huì)自動(dòng)調(diào)整以顯示每個(gè)章節(jié)的正確起始頁(yè)。一旦你創(chuàng)建你的目錄頁(yè),并添加必要的文字組件,那么你的報(bào)表生成該功能的步驟如下:
創(chuàng)建一個(gè)Flag變量
第一步是在報(bào)表字典中創(chuàng)建一個(gè)名為'flag'的布爾變量:
該標(biāo)志將被用于跟蹤一個(gè)頁(yè)面錨是否應(yīng)該被添加到當(dāng)前頁(yè)面。
注意: 該變量名是不是強(qiáng)制性的,你可以根據(jù)自己的需求進(jìn)行修改。
設(shè)置標(biāo)簽
設(shè)置用于輸出頁(yè)碼的每個(gè)文本組件的Tag屬性(位于對(duì)象檢查Interaction的下方)為顯示在目錄表的名稱(chēng)。在上面的例子中第一頁(yè)包含“DirectorsOfficersAndAdvisers',因此這將是其標(biāo)簽值。重復(fù)此過(guò)程,每增加一頁(yè),被列入目錄表中。
設(shè)置文本表達(dá)式
為了在目錄表中獲得相應(yīng)的頁(yè)碼,我們將使用GetAnchorPageNumber方法的文本表達(dá)式。將每一個(gè)輸出頁(yè)碼的文本組件設(shè)置表達(dá)式:
{GetAnchorPageNumber(sender.TagValue)}
與設(shè)置標(biāo)記時(shí)不同,你可以為每個(gè)文本組件使用完全相同的表達(dá)式。
給BeginRender事件添加代碼
通過(guò)點(diǎn)擊對(duì)象檢查中事件旁邊的省略號(hào)為每個(gè)頁(yè)面打開(kāi)用于BeginRender的事件編輯器,然后添加如下代碼:
為報(bào)告中的每個(gè)頁(yè)面添加相同的代碼,只是AddAnchor調(diào)用應(yīng)進(jìn)行修改,以便在每種情況下將相關(guān)頁(yè)面的名稱(chēng)顯示為參數(shù)。
給EndRender事件添加代碼
通過(guò)點(diǎn)擊對(duì)象檢查中事件旁邊的省略號(hào)為每個(gè)頁(yè)面打開(kāi)用于EndRender的事件編輯器,然后添加如下代碼:
flag = true;
同樣你可以為每一個(gè)頁(yè)面使用相同的表達(dá)式?,F(xiàn)在你就可以打印或預(yù)覽報(bào)表,并且目錄表的頁(yè)碼將會(huì)被正確的計(jì)算。
打破零回復(fù)...
登錄 慧都網(wǎng)發(fā)表評(píng)論