在專案開發中,往往會碰到一些非常規的需求,每次碰到這種情況,都需要花費時間來整理自己的思路,然後參考網路上其他人的實現方式或者作法,有時候可以找到一些相同的模組進行改進即可符合需求,但往往很多是需要自己潛心研究,然後提煉優化,雖然探索過程還是比較開心,不過時間肯定是需要花不少的。我每次碰到這種情況,都會沉下心來,力求把這種的模組做得更好一點,方便以後的重用,這樣每次抱著這樣的態度,著實積累了不少好的東西,也可以為後面的專案夯實基礎。
在一次winform的專案開發過程中,客戶需要對一些體檢資料等引數進行曲線展示,其實圖表控制項有很多,但是我印象比較深的還是開源的zedgraph控制項,這個既可以用在web上,也可以用在winform上的開源控制項,有著簡單易用的特點,因此我會先考慮是否可以滿足要求。在需求中,我需要定製顯示曲線報表的內容,按照每行乙個人員的資料,然後再每行中展現該人員的相關圖表資訊,而且這種的報表要可以實現列印的功能。在經過一段時間的摸索及實現提煉,得到了比較滿意的效果,先來進行總體的介紹先把。
通過把好的思路,有用的技巧進行積累整合到winform開發框架中,方便自己,也方便別人,提高工作效率。
一行乙個人員的曲線資料,可以對同一曲線專案進行對比,方便使用者的實際業務對比操作。
由於在乙個介面中展示多個圖表圖形的時候,會比較小,為了更直觀顯示曲線資料,可以通過單獨開啟乙個新的視窗進行曲線縮放操作,支援滑鼠的滾動放大縮小,同時zedgraph支援繪圖點的資訊提示,非常友好。
由於使用者控制項是自定義組裝的,因此要實現自定義的列印功能才可以,這個自定義列印的東西確實需要慢慢測試研究,這個地方花了不少時間。
通過在devexpress列印介面中展示預覽效果,方便可以進行列印確認操作,以及預覽最終的效果,並支援把文件匯出到pdf或者中,非常方便易用。
以上就是這個曲線報表的主要幾個特點,不過這樣的曲線,基本上能夠滿足我們日常的一些資料曲線的展現的了。
實現上我們需要把需求和介面拆分,首先我們在乙個設計主介面,在住介面上防止乙個tablelayout的布局控制項,方便我們動態新增每個單一的控制項進去。
1)設計報表顯示主介面
2)設計曲線報表元件
然後設計乙個空白的布局flowlayout控制項,用來擺放乙個或者多個的曲線報表專案,例如體重曲線、視力曲線、血壓曲線等專案的,實現**如下所示。
publicvoid
binddata()
else
if (curvedata.checktype ==checktype.年度大體檢)
else
if (curvedata.checktype ==checktype.飛行前體檢)
break
;
#endregion
} }
private其他**不在贅述。void
bindweight()
else
if (curvedata.checktype ==checktype.季度小體檢)
weightcurve curve = new
weightcurve();
curve.curvedata =curvedata;
curve.datatable =dt;
this
.layoutpanel1.controls.add(curve);
}
3)設計曲線專案元件
由於曲線報表涉及很多展示的專案,每項又有一些不同,因此我們為不同的專案設計乙個元件,如體重曲線如下所示,在乙個自定義控制項上面放置乙個zedgraph元件,設計好這個元件的相關屬性和事件。
這個控制項預設是英文的,所以如果需要使用中文選單,需要自己漢化一下**,然後編譯出來自己使用即可。
實現**如下所示
graphpane mypane =zgc.graphpane;4)設計圖表列印模組mypane.curvelist.clear();
//設定標題及座標軸的說明
mypane.title.text = string.format("
【】體重曲線
", curvedata.pilotname);
mypane.xaxis.title.text = "
體檢日期";
mypane.yaxis.title.text = "
體重(kg)";
pointpairlist list = new
pointpairlist();
foreach(datarow row in
datatable.rows)
lineitem mycurve = mypane.addcurve("體重"
, list, color.red, symboltype.diamond);
mycurve.symbol.fill = new fill(color.white);
列印的時候,需要自己在列印原件上進行圖形的繪製,這乙個是比較複雜的除錯過程,開始總是想著是否可以把控制項列印出來就ok,可是這種操作,一旦介面遮擋,就列印不出實際的效果了,所以只好類似繪圖一樣,使用自定義繪製方式。
這樣我計算好每個控制項的大小尺寸(包括lable控制項、曲線圖表控制項),然後挨著繪製即可,主要**如下所示。
好了,整個曲線報表的顯示效果及實現思路及部分核心**,都已經介紹完畢了,在整個過程中,除了經驗外,我覺得最重要的就是要細心、耐心及用心,專案開發就是把各種技巧、各種思路都集中起來,才可以快速高效的開發出高質量、客戶反映好的專案出來。
Winform開發框架之資料曲線報表
在專案開發中,往往會碰到一些非常規的需求,每次碰到這種情況,都需要花費時間來整理自己的思路,然後參考網路上其他人的實現方式或者作法,有時候可以找到一些相同的模組進行改進即可符合需求,但往往很多是需要自己潛心研究,然後提煉優化,雖然探索過程還是比較開心,不過時間肯定是需要花不少的。我每次碰到這種情況,...
Winform開發框架之介紹
框架已經正式改名為 yeswin開發框架,最新資料請前往 yeswinform 簡介 yes快速開發平台框架 yesdotnet.com winform開發框架,儘量減少程式設計師在介面中的 量和工作量,model自動生成,介面以及控制項自動生成,簡單的邏輯自動生成。自動生成的介面已經實現簡單邏輯增...
Winform開發框架之資料訪問層的設計
前面介紹過,該winform開發框架支援多種資料庫的訪問,只需要對配置進行修改即可切換,如下圖所示。其中我們可以看到,裡面有幾種資料訪問層的相關資料,大致知道是通過同一的idal資料訪問層介面派生出幾個對應不同資料庫的操作層,由業務邏輯層bll進行相應的呼叫,但是具體細節從上圖並不能了解到。其實他們...