本文為實現在水晶報表中顯示任意列,並且無論顯示多少列,要保持列寬總和不變,即當顯示的列數比較少時,不能讓其「縮」在左側,而導致右側一片放空,就是要實現根據列數的多少讓其具有「自動拉伸」的效果。
本文實現的效果是顯示3~8列,望能給各位起到一定的參考作用:
因最多顯示8列,故先在模板放置8個字段物件
模板看似簡單,但它對尺寸的控制要求很高,不僅每個物件大小要保持一樣,並且對物件間的間距控制也半點馬虎不得,比如這裡每個物件的寬度為1353,列1的left屬性為105,所以列2的left屬性=105+1353+40=1498,列3的left屬性=1498+1353+40……依此類推得其餘列的left屬性值,中間的40是物件邊框的寬度。這邊模板的精確設計是為了獲得 列寬總和,因為這個列寬總和始終保持不變,無論當前顯示多少列
最少顯示3列,故對後面五列設定抑制顯示,當然要加上抑制顯示條件,其中有乙個引數欄位optionnum,表示當前要顯示的總列數
模板就是這樣,我們再來看看關鍵**段,本文最最關鍵的正是如何動態控制物件的尺寸並以此來達到「自動拉伸」的效果
[c-sharp]view plain
copy
print?
///
/// 強型別資料集,水晶報表「骨架」
///
dataset1 mydataset = new dataset1();
///
/// 「檢視報表」按鈕事件
///
private
void btnshowreport_click(object sender, eventargs e)
//把要顯示的列數以引數形式傳給水晶報表
myreport.setparametervalue("optionnum", displaycolumnnum);
displaycolumnbyn(displaycolumnnum);//這裡尺寸控制是關鍵
crystalreportviewer1.reportsource = myreport;
} ///
/// 控制報表顯示的列數及其尺寸控制
/// 無論顯示多少列,控制所有列寬的總和保持一致
/// 【本方法也正是本文最最核心的片段】
///
/// 欲顯示的列數
private
void displaycolumnbyn(int n)
} ///
/// 全域性水晶報表物件
///
reportdocument myreport;
///
///
private
void rptform_formclosing(object sender, formclosingeventargs e)
///
/// 填充水晶報表「骨架」並為水晶報表設定資料來源
///
private
void rptform_load(object sender, eventargs e)
最後的效果圖
來自:
動態水晶報表 任意表,任意列 之 動態格線實現
在前文 動態水晶報表 任意表,任意列,以及動態格線 中,有乙個地方還沒有完全實現。就是根據內容自動調整表頭的列,跟內容 相對應。我們也注意到了,在前文中,後面的列之所以不顯示,不是因為它們沒有了,它們是存在的,只是內容是空 注意是空,不是空格。依此延伸開來,表頭也可以用此原理來實現。本文接上文,稍加...
動態水晶報表 任意表,任意列 之 動態格線實現
在前文 動態水晶報表 任意表,任意列,以及動態格線 中,有乙個地方還沒有完全實現。就是根據內容自動調整表頭的列,跟內容 相對應。我們也注意到了,在前文中,後面的列之所以不顯示,不是因為它們沒有了,它們是存在的,只是內容是空 注意是空,不是空格。依此延伸開來,表頭也可以用此原理來實現。本文接上文,稍加...
顯示水晶報表的公用類
在應用程式中,通常我們都需要顯示報表。在.net中,我們大多數情況使用了水晶報表,如果我們不是直接將報表傳送到印表機列印,那麼就需要將報表顯示出來,這種情況下需要使用報表檢視器 crystalreportviewer crystalreportviewer作為乙個控制項,它需要乙個承載它的窗體或頁面...