原創(chuàng)|使用教程|編輯:我只采一朵|2017-12-29 10:02:43.000|閱讀 260 次
概述:在瀏覽電子報表時,你常常會想要高亮顯示一些文本,就像你在閱讀紙質(zhì)文檔時用熒光筆勾畫重點那樣。我要告訴你,這是可以實現(xiàn)的。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在瀏覽電子報表時,你常常會想要高亮顯示一些文本,就像你在閱讀紙質(zhì)文檔時用熒光筆勾畫重點那樣。我要告訴你,這是可以實現(xiàn)的。
在報表預(yù)覽模式下,你可以通過單擊鼠標(biāo)來選擇所需的文本字段。也就是說,你單擊文本框,它就會改變顏色。如果再次按下,突出顯示效果消失。我會告訴你兩種方法來做到這一點,他們都涉及使用報表腳本。
方法1:該方法的本質(zhì)是使用一個Sender(即引發(fā)事件的對象)來分配一個新的顏色給OnCklick事件處理句柄。在這種情況下,你需要更新緩存中的報表頁面,因為 因為預(yù)覽模式會顯示其報表。
那么,讓我們用產(chǎn)品清單創(chuàng)建一個最簡單的報表:
假設(shè)我們想通過點擊來突出顯示其中的一個字段。而當(dāng)我們再次點擊時,我們想刪除高亮顯示。為文本對象創(chuàng)建事件“點擊”,以顯示Products.ProductName字段。
private void Text1_Click(object sender, EventArgs e) { if (sender is TextObject) { //Define sender as TextObject TextObject obj = sender as TextObject; //Method of highlighting an object SwitchColor(obj); if(Report.Preview != null) { // Refresh the current page of the report in the cache, if the report is viewed on a desktop Report.PreparedPages.ModifyPage(Report.Preview.PageNo - 1, obj.Page as ReportPage); //Refresh preview Report.Preview.Refresh(); } } } private void SwitchColor(TextObject obj) { // Check whether the object is filled with yellow if (obj.Fill is SolidFill && (obj.Fill as SolidFill).Color != Color.Yellow) //Fill with yellow obj.Fill = new SolidFill(Color.Yellow); // Clear the fill else obj.Fill = new SolidFill(Color.Transparent); }
如你所見,我們從點擊事件中提取Sender對象,將其定義為文本對象并更改其填充。然后,重新繪制緩存中的報表頁面。如果我們有一個web報表,我們只需更改對象的填充,而無需重新繪制報表頁面。
我們再考慮下另一種替代方法。
方法2:這種方法的本質(zhì)是確定對象的坐標(biāo),我們將用顏色填充。然后我們更新緩存中的報表頁面,就像第一個方法一樣。
private void Text1_Click(object sender, EventArgs e) { if (sender is TextObject) { // Get the current page number int pageNo = Report.Preview.PageNo - 1; // Get the page by number ReportPage page = Report.PreparedPages.GetPage(pageNo); // Define sender as TextObject - this phantom object, we also need the original object from the preview page TextObject obj = sender as TextObject; // Looking the original object on the preview page foreach(ReportComponentBase b in page.AllObjects) // It is necessary to identify the object by name and coordinates if (b.Name == obj.Name && b.AbsTop == obj.AbsTop && b.AbsLeft == obj.AbsLeft) { // Get the original object obj = b as TextObject; break; } // Defining the object's fill if (obj.Fill is SolidFill && (obj.Fill as SolidFill).Color != Color.Yellow) obj.Fill = new SolidFill(Color.Yellow); else obj.Fill = new SolidFill(Color.Transparent); // Update the report page in the cache Report.PreparedPages.ModifyPage(pageNo, page); // Refresh prewiew Report.Preview.Refresh(); } }
我們來演示一下這個代碼的操作:
這種方法客觀上比較復(fù)雜,只適用于預(yù)覽模式。但是,它有它的優(yōu)點。假設(shè)你不僅要突出顯示你單擊的文本對象,還要突出顯示表中的整個行。然后添加另一個文本對象,使其與我們將單擊的對象重疊。我們拉伸它的整個寬度。文本對象的左邊界與文本對象的左邊界重合,為此我們創(chuàng)建了一個點擊事件,這一點很重要。右鍵單擊,并從菜單中選擇:
就這樣,我們將這個對象移動到背景,以便它不與其他文本字段重疊。
修改一下我們以前的代碼:
if (b.AbsTop == obj.AbsTop && b.AbsLeft == obj.AbsLeft) { // Get the original object obj = b as TextObject; break; }
我從條件中刪除了名稱的比較,只留下了字段開始坐標(biāo)的比較。現(xiàn)在運行報表并點擊產(chǎn)品名稱:
如上所示,這兩種方法都是可行的。第一種方法比較簡單,但是只允許你選擇Sender中的特定對象。第二個更復(fù)雜,但它可以讓你突出Sender之外的的對象。你只需要指定他們的坐標(biāo)。在web報表中,你只能使用第一種方法。
當(dāng)然,你不僅可以更改背景顏色,還可以更改文本本身的顏色、樣式或字體。另外,當(dāng)以任何支持的格式(例如PDF)導(dǎo)出報表時,所有這些修改都會被保留。
產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動 | | 聯(lián)系Elyn
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn