• <menu id="w2i4a"></menu>
  • 首頁(yè) > 慧問(wèn) > 頻道

    Stimulsoft Reports.Net開(kāi)發(fā)者常見(jiàn)問(wèn)題解答

    發(fā)表于2021-07-21 回復(fù):1 查看:4606  |  

    1.如何修改數(shù)據(jù)的排序?

    代碼如下:

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

    2.如何得到一個(gè)組件的實(shí)際尺寸大???

    使用StiComponent.GetActualSize方法,該方法返回組件的尺寸。但是,請(qǐng)注意,如果你想要該方法返回CanGrow屬性的正確數(shù)據(jù),CanShrink和AutoWidth屬性必須設(shè)置為true。

    3.怎么通過(guò)組件的名稱(chēng)查找組件?

    代碼如下:

    C#

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

    VB

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

    4.怎么獲取或設(shè)置文本為rtf組件的rtf格式?

    使用StiRichText.RtfText屬性。

    5.怎么用代碼給組件添加書(shū)簽?

    使用以下代碼:

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

    6.Text和TextValue之間的區(qū)別是什么?

    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ì)被使用。

    7.我應(yīng)該在圖像的DataColumn字段指定什么?

    在該字段你需要指定數(shù)據(jù)源和數(shù)據(jù)列。示例如下:
    Customers.Photo

    注意不能放括號(hào)。你也可以通過(guò)鏈接進(jìn)行調(diào)用。如下:
    Products.Customers.Photo

    8.怎么從路徑加載保存在數(shù)據(jù)庫(kù)中的圖像?

    使用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綁定數(shù)據(jù)?

    1. 指定DataBindings屬性;
    2. 通過(guò)以下代碼初始化ComboBox
      ComboBox comboBox = ReportComboBox.Control;
    3. 在FormLoad事件中填充組合框:
      ReportComboBox.Items.Add("123");

    10.怎么訪問(wèn)報(bào)表的代碼文本?

    使用StiReport類(lèi)的Script屬性。該屬性包含報(bào)表的代碼文本。

    11.怎么將報(bào)表生成一份新的代碼?

    使用StiReport類(lèi)的ScriptNew方法。代碼如下:

    C#

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

    VB

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

    12.怎么更新報(bào)表的代碼?

    使用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方法。

    13.如何在報(bào)表中使用自定義程序集?

    確保屬性窗口可見(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)表代碼中自定義程序集中的功能了。

    14.怎么從一個(gè)報(bào)表訪問(wèn)我的應(yīng)用程序中的對(duì)象?

    步驟如下:

    1. 你需要添加你應(yīng)用程序的相關(guān)程序集,在報(bào)表的ReferencedAssemblies屬性中添加。
    2. 然后描述包含報(bào)表類(lèi)中數(shù)據(jù)的字段。如果你想在沒(méi)有完整字段路徑的情況下描述字段,那么你還需要添加你的類(lèi)型的命名空間。
    3. 在報(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}

    15.怎么處理名稱(chēng)為C#關(guān)鍵字的列?

    在列名稱(chēng)前添加一個(gè)@符號(hào),示例:@class

    16.怎么從一個(gè)URL加載圖像?

    使用下面的代碼加載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屬性。

    17.如何查找已加載報(bào)表的文件名稱(chēng)?

    你可以從ReportFile屬性獲取以前的文件路徑。示例如下:

    string path = report.ReportFile;

    18.怎么在預(yù)覽中修改CheckBox的值?

    使用一種可以在預(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

    19.怎么修改頁(yè)碼?

    你只需要分配系統(tǒng)變量PageNumber的值即可,例:

    PageNumber = 1;
    

    同樣你還可以使用ResetPageNumber屬性。

    20.有什么方法實(shí)現(xiàn)在第二頁(yè)的數(shù)據(jù)帶打印標(biāo)題嗎?

    你可以使用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.怎么處理重復(fù)值?

    Stimulsoft

    ProcessingDuplicates屬性有以下值:

    • ProcessingDuplicates=Merge—合并重復(fù)值
    • ProcessingDuplicates=None—重復(fù)值不作任何處理
    • ProcessingDuplicates=Hide—只輸出重復(fù)值的第一個(gè)字符串

    22.怎么給事件添加事件處理器?

    1. 在你調(diào)用Show后,報(bào)表引擎會(huì)自動(dòng)調(diào)用Compile方法并創(chuàng)建一個(gè)新的報(bào)表-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()
      該代碼的處理器處理編譯過(guò)的報(bào)表的事件。
    2. 你可以直接設(shè)置事件腳本:
      C#
      component.BeforePrintEvent.Script = "MessageBox.Show(\"test\")";
      VB
      Component.BeforePrintEvent.Script = "MessageBox.Show(""test"")"
      你可以指定事件的腳本,在報(bào)表編譯后腳本就會(huì)生成一個(gè)事件處理器。

    23.怎么訪問(wèn)報(bào)表的頁(yè)面?

    報(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)

    24.如何在不打印的情況下獲取一個(gè)數(shù)據(jù)帶的總和?

    你需要將數(shù)據(jù)帶的高度減小為0。

    25.如何在Expression的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行排序?

    通常你需要在表達(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。

    Stimulsoft

    以上所有步驟都完成后,字符串就會(huì)被正確的排序啦。

    20
    300
    1000
    

    注意:在表達(dá)式中你可以使用表中的任何行進(jìn)行排序。

    26.交叉報(bào)表通過(guò)3張表渲染?

    讓我們看看下面的任務(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)。

    27.GetValue事件處理器的RichText組件中的文本格式化相關(guān)的問(wè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è)置之后:

    Stimulsoft

    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ù)代表在控制的右邊緣與文本的右邊緣之間的像素間距。

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

    在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))

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

    Stimulsoft DLL不支持模糊或嵌入。

    30.怎么添加一個(gè)目錄表到多頁(yè)報(bào)表?

    一個(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)目錄表的:

    Stimulsoft

    使用這種方法目錄對(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'的布爾變量:

    Stimulsoft

    該標(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的事件編輯器,然后添加如下代碼:

    Stimulsoft

    為報(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ì)算。

    0個(gè)回答

    打破零回復(fù)...

    回復(fù)

    登錄 慧都網(wǎng)發(fā)表評(píng)論

    掃碼咨詢(xún)


    添加微信 立即咨詢(xún)

    電話咨詢(xún)

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();