您好,登錄后才能下訂單哦!
FastReport .Net如何將Bands從一份報(bào)告復(fù)制到另一份報(bào)告的示例分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
FastReport .Net是適用于Windows Forms,ASP.NET,MVC和.NET Core的全功能報(bào)表解決方案。它可以在Microsoft Visual Studio 2005-2019中使用。支持.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。
在FastReport .NET 2021.1的新版本中,我們實(shí)現(xiàn)了對(duì).NET 5的支持。添加了新條形碼-Deutsce Post Leitcode。將RTF轉(zhuǎn)換為報(bào)告對(duì)象的算法已得到顯著改進(jìn)。并且還添加了用于轉(zhuǎn)換數(shù)字的新功能。
有時(shí)需要在另一個(gè)報(bào)告中使用一部分報(bào)告。在簡(jiǎn)單的情況下,您可以使用報(bào)表繼承來(lái)執(zhí)行此操作。
例如,在某些情況下,所有報(bào)告都有共同的元素(公司徽標(biāo),簽名等)。然后,可以將這些對(duì)象移至父報(bào)表,并在創(chuàng)建子報(bào)表時(shí)將其自動(dòng)復(fù)制。因此,您無(wú)需每次都手動(dòng)復(fù)制它們,從而大大簡(jiǎn)化并加速了新報(bào)告的創(chuàng)建。此外,如果您更改了父報(bào)表中的某些內(nèi)容,這些更改也將反映在所有子報(bào)表中。
但是,報(bào)告繼承有許多限制。在某些情況下,一個(gè)報(bào)告只有一個(gè)“父”報(bào)告,而使一個(gè)“父”報(bào)告成為完全不同的報(bào)告變得很有必要。似乎可以更改BaseReport屬性,但不幸的是,它無(wú)法解決。
但是,可以通過(guò)一種奇妙的方式解決此問(wèn)題-通過(guò)將一個(gè)報(bào)告代碼中的帶替換為另一個(gè)報(bào)告中的帶。
假設(shè)有一個(gè)基準(zhǔn)報(bào)告(base.frx),并且需要將其范圍復(fù)制到子報(bào)告(child.frx)。您需要用“ Data1”名稱(chēng)替換PageHeader,PageFooter和DataBand。以下代碼示例假定兩個(gè)報(bào)告都位于C驅(qū)動(dòng)器的根文件夾中。
首先,您需要下載兩個(gè)報(bào)告:
Report base = new Report(); base.Load(@"C:\base.frx"); Report child = new Report(); child.Load(@"C:\child.frx");
下一步是從兩個(gè)報(bào)告中獲取頁(yè)面。知道頁(yè)面名稱(chēng)很重要。下面的示例假定兩個(gè)報(bào)告中的頁(yè)面名稱(chēng)均為“ Page1”:
ReportPage basePage = base.FindObject("Page1") as ReportPage; ReportPage childPage = child.FindObject("Page1") as ReportPage;
如果您不知道頁(yè)面名稱(chēng),則可以從索引中獲取它們。例如,進(jìn)一步,我們可以訪問(wèn)兩個(gè)報(bào)告的第一頁(yè):
ReportPage basePage = baseReport.Pages[0] as ReportPage; ReportPage childPage = childReport.Pages[0] as ReportPage;
這兩個(gè)選項(xiàng)都是合適的,并且會(huì)導(dǎo)致相同的結(jié)果。
現(xiàn)在,您可以替換PageHeader和 PageFooter。很簡(jiǎn)單:
childPage.PageHeader = basePage.PageHeader; childPage.PageFooter = basePage.PageFooter;
這些行復(fù)制具有所有屬性和設(shè)置的兩個(gè)波段。此外,位于它們上面的所有對(duì)象都將被復(fù)制,并且屬性不會(huì)丟失。
接下來(lái),將DataBand替換為“ Data1”名稱(chēng):
DataBand baseBand = basePage.FindObject("Data1") as DataBand; DataBand childBand = childPage.FindObject("Data1") as DataBand; // необходимо получить индекс Data1 в дочернем отчете int childBandIndex = childPage.Bands.IndexOf(childBand); // теперь его можно удалить childPage.Bands.Remove(childBand); // и вставить на его место бэнд из базового отчета childPage.Bands.Insert(bandIndex, baseBand);
最后,將復(fù)制具有所有屬性和子對(duì)象的波段,并傳輸與負(fù)責(zé)DataSource屬性的數(shù)據(jù)源的綁定。沒(méi)有此綁定,波段將無(wú)法正常工作,也不會(huì)從數(shù)據(jù)庫(kù)輸出數(shù)據(jù)。
我們只需要復(fù)制數(shù)據(jù)源??梢允褂靡韵麓a段完成此操作:
for (int i = 0; i < baseReport.Dictionary.DataSources.Count; i++) { childReport.Dictionary.DataSources.Add(baseReport.Dictionary.DataSources[i]); }
因此,所有數(shù)據(jù)源均已復(fù)制。如果沒(méi)有必要,則只能克隆所需的克隆。
而已。幾十行代碼行使將帶和對(duì)象從一個(gè)報(bào)告復(fù)制到另一個(gè)報(bào)告成為可能。如果樂(lè)隊(duì)中有很多對(duì)象,那么與設(shè)計(jì)師復(fù)制它們會(huì)很漫長(zhǎng)而乏味,并且從頭開(kāi)始創(chuàng)建它們會(huì)花費(fèi)更長(zhǎng)的時(shí)間。
當(dāng)然,如果在此示例中基線報(bào)告僅復(fù)制了條帶,則可以通過(guò)簡(jiǎn)單地復(fù)制和粘貼報(bào)告文件來(lái)更輕松地執(zhí)行此任務(wù)。撇開(kāi)笑話,您可以在不需要新報(bào)告中所有波段的情況下,使用此方法從一個(gè)集合中復(fù)制一個(gè)或多個(gè)波段?;蛘?,您可以從一個(gè)報(bào)表中獲取頁(yè)眉,從另一個(gè)報(bào)表中獲取數(shù)據(jù)帶,并從第三個(gè)報(bào)表中獲取頁(yè)腳。
看完上述內(nèi)容,你們掌握FastReport .Net如何將Bands從一份報(bào)告復(fù)制到另一份報(bào)告的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。