水晶報表 垂直文字的變法實現

2021-09-30 05:57:06 字數 1886 閱讀 2995

大體實現思路是這樣的:

每頁固定顯示幾行資料,最後一頁不夠的補空行,這樣的想法是基於第一列的文字是垂直顯示的,既是垂直顯示,總應該讓它有足夠的行給它顯示這個垂直文字吧,盡量讓它達到「垂直居中」的效果,因為在水晶報表裡面是沒有什麼屬性可以直接設定「垂直居中」的效果的。雖然沒有屬性可以設定,但是我們可以變著法的來實現,不過這個過程稍顯繁瑣,尤其是每頁固定顯示的行數多的時候(比如20條、30條甚至更多),須有足夠的耐心:)

首先閱讀本文前需先理解阿泰的這篇《水晶報表自動補空行&格線》(以下簡稱《補空行》):否則將難以理清本文的思路走向

雖然最後一頁經過補空行後總行數是固定的,但有資料記錄的行數不定,該如何控制顯示最後一頁第一列的「垂直文字」呢,這是本文的最大難點(其他都是一些細活,本文方法的實現真的很不容易),經過一番思索,突破這一難點的原理是這樣的:(本文每頁資料控制顯示10行,從第3行開始顯示第一列的「垂直文字」)

如果總記錄數/10的餘數=1,說明最後一頁顯示的有資料記錄只有一條,

緊隨其後的則是顯示9個空行,為了和前面資料頁保持一致,第一列的「垂直文字」

自然也要從第三行(也就是此時的第2個空行)開始顯示;

如果餘數為2,說明此時最後一頁顯示的有資料記錄有兩條,緊隨其後的

則是顯示8個空行,此時就要從第乙個空行開始顯示;

......

好了,原理清楚後,看看模板的設計,這裡只是給出細微之處的設計,具體設計詳見《補空行》

第一列「垂直文字」的實現全是通過公式來實現的,所以少不了公式的操作,我們先看看公式在報表模板的物理位置

這裡為什麼要建6個公式呢(col不屬於空行顯示的公式),原因在於「最壞的情況」就是最後一頁只有一條有資料記錄,則其餘9行全是空行,此時第一列在:

第乙個空行要顯示為空;

第二個空行要顯示「球」;

第三個空行要顯示「星」;

第四個空行要顯示「一」;

第五個空行要顯示「覽」;

第六個空行要顯示「表」

因此需建立6個公式來合力控制顯示第一列的「垂直文字」,知道原理後我們再來仔細瞧瞧這幾個公式裡面究竟編輯的是什麼內容:)

col公式:

emptycol1公式:

emptycol2公式:

numbervar index := count() mod 10;

if index in [1,2,3,4,5] then

mid('球星一覽表',index,1)

else

''emptycol3公式:

numbervar index := count() mod 10;

if index in [1,2,3,4] then

mid('球星一覽表',index+1,1)

else

''emptycol4公式:

numbervar index := count() mod 10;

if index in [1,2,3] then

mid('球星一覽表',index+2,1)

else

''emptycol5公式:

numbervar index := count() mod 10;

if index in [1,2] then

mid('球星一覽表',index+3,1)

else

''emptycol6公式:

numbervar index := count() mod 10;

if index=1 then

mid('球星一覽表',index+4,1)

else

''經過這樣的控制後我們再來看看最後一頁的效果

動態水晶報表的實現

實現基本功能的動態水晶報表 系統配置 vs2005 內嵌的水表 目的 我也是剛接觸.net不久,做專案過程中需要設計報表,可乙個個的做起來煩啊,原來做過乙個vb6的動態報表,用起來還不錯,故也想弄乙個水表的東東。因為水表接觸時間不長,做的也不是很順手,用了我半個月的時間才弄個大概模樣,不當之處還請各...

水晶報表進行每頁統計(在水晶報表中實現每頁統計)

思路如下 crystal語法 1 用乙個變數mysum來累計頁面資料 訂單.訂單金額 公式 currentsum,放在詳細資料節需要進行彙總的字段的位置 mysum 如果不需要顯示,抑制顯示即可 2 在每頁的頁尾獲取到這個變數的值 也就是該頁最後乙個sum值 當然這個時候後乙個mysum是前面所有資...

水晶報表中文字的對齊問題

一般來說,如果把引數字段作為乙個單獨的文字域放在水晶報表中。在 asp.net 中要實現對齊會是件很麻煩得事情,而且通常情況是,即使好不容易實現了對齊,可是當用報表匯出功能匯出該報表的時候,到處的檔案的格式又是亂的了。要想徹底解決這個問題其實很簡單,把該引數字段嵌入到文字域中就可以了。而文字域之間的...