水晶報表顯示任意列並保持列寬總和不變

2021-06-21 10:29:49 字數 1563 閱讀 5044

本文為實現在水晶報表中顯示任意列,並且無論顯示多少列,要保持列寬總和不變,即當顯示的列數比較少時,不能讓其「縮」在左側,而導致右側一片放空,就是要實現根據列數的多少讓其具有「自動拉伸」的效果。

本文實現的效果是顯示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作為乙個控制項,它需要乙個承載它的窗體或頁面...