如何在施工物料管理Web系統中處理大量資料並顯示
最近在開發施工物料管理系統,其中涉及大量的物料資訊需要管理和彙總,資料量非常龐大。之前嘗試自己通過將原始資料,加工處理建模,在後臺程式碼中通過分組、轉置再顯示到 Web 頁面中,但自己編寫的程式碼量非常大,而且效能很差簡直無法忍受。後來使用了矩表控制元件非常好的解決了需求,本文主要介紹之前如何通過程式碼將資料展現在頁面中,以及使用矩表控制元件建立行列轉置和動態列表格,並顯示在網頁中。
一、通過程式碼將資料展現在頁面的步驟
1.行列轉置程式碼片段:
public static DataTable GetCrossTable(DataTable dt) { if (dt == null || dt.Columns.Count != 3 || dt.Rows.Count == 0) { return dt; } else { DataTable result = new DataTable(); result.Columns.Add(dt.Columns[0].ColumnName); DataTable dtColumns = dt.DefaultView.ToTable("dtColumns", true, dt.Columns[1].ColumnName); for (int i = 0; i < dtColumns.Rows.Count; i++) { string colName; if (dtColumns.Rows[1][0] is DateTime) { colName = Convert.ToDateTime(dtColumns.Rows[i][0]).ToString(); } else { colName = dtColumns.Rows[i][0].ToString(); } result.Columns.Add(colName); result.Columns[i + 1].DefaultValue = "0"; } DataRow drNew = result.NewRow(); drNew[0] = dt.Rows[0][0]; string rowName = drNew[0].ToString(); foreach (DataRow dr in dt.Rows) { string colName = dr[1].ToString(); double dValue = Convert.ToDouble(dr[2]); if (dr[0].ToString().Equals(rowName, StringComparison.CurrentCultureIgnoreCase)) { drNew[colName] = dValue.ToString(); } else { result.Rows.Add(drNew); drNew = result.NewRow(); drNew[0] = dr[0]; rowName = drNew[0].ToString(); drNew[colName] = dValue.ToString(); } } result.Rows.Add(drNew); return result; } }
2.實現多級分組邏輯示例程式碼:
public void GroupByClassLeverl() { var query = from inforCode in ClassReportDetail group InfoCode by BigClassName into newGroup orderby newGroup.Key select newGroup; foreach (var BigClassName in ClassReportDetail ) { Console.WriteLine("Key: {0}", nameGroup.Key); foreach (var ClassName in nameGroup) { Console.WriteLine("\t{0}, {1}", student.BigClassName , student.ClassName ); ………… } } }
3. SQL 語句實現中實現彙總分級功能,進行7張表的複雜連線和彙總:
每一張表中包含多列,需要做出多層連線和排序,並根據使用者輸入對資料進行過濾
select a.*,b.SupplyMode,h.ClassName,g.ClassName BigClassName,e.ReceiveDepName,f.W_ReceiveDepName, isnull(b.reQuantity,0)reQuantity,isnull(b.reBookSum,0) reBookSum,isnull(d.mQuantity,0) mQuantity,isnull(d.mBookSum,0) …, isnull(f.W_allQuantity,0) W_allQuantity,isnull(f.W_allAllotSum,0) W_allAllotSum,isnull(f.W_AllotBookSum,0) W_AllotBookSum from (select a.InfoCode,a.InfoName,a.InfoModel,a.InfoUnit,a.ClassNodebh,a.Rate,a.NonRatePrice,a.BookPrice,a.Manufacturer,a.BatchNo,a.BarCode,a.Storeroom,a.InfoRemark from ( select b.InfoCode,b.InfoName,b.InfoModel,b.InfoUnit,b.ClassNodebh,b.Rate,b.NonRatePrice,b.BookPrice,b.Manufacturer,b.BatchNo,b.BarCode,b.Storeroom,b.InfoRemark from dbo.M_MonthStore b where left(b.ProjectID,LEN(@projectid))=@projectid and b.Month>=@startmonth and b.Month<=@endmonth and b.MonthBalanceNum!=0 group by b.InfoCode,b.InfoName,b.InfoModel,b.InfoUnit,b.ClassNodebh,b.Rate,b.NonRatePrice,b.BookPrice,b.Manufacturer,b.BatchNo,b.BarCode,b.Storeroom,b.InfoRemark union all select InfoCode,InfoName,InfoModel,InfoUnit,ClassNodebh,Rate,NonRatePrice,BookPrice,Manufacturer,BatchNo,BarCode,b.Storeroom,InfoRemark from dbo.M_ReceiveOrder a inner join dbo.M_ReceiveOrderItem b on a.ProjectID=b.ProjectID and a.OrderID=b.OrderID where left(a.ProjectID,LEN(@projectid))=@projectid and a.OrderDate>=@startdate AND a.OrderDate<=@enddate AND a.IsAudit=1 union all ……) b on a.InfoCode=b.InfoCode and a.InfoName=b.InfoName and a.InfoModel=b.InfoModel and a.InfoUnit=b.InfoUnit and a.ClassNodebh=b.ClassNodebh and a.StoreRoom=b.StoreRoom ………. order by supplymode,ReceiveDepName,W_ReceiveDepName desc
最終只能將資料單一的呈現出來,而且樣式過於簡單,將近上萬條的資料呈現起來效能無法承受,常常會導致頁面崩潰。
使用報表提供的矩表控制元件實現行列轉置,就不需要再寫那麼複雜的行列轉置和分組程式碼,而且會根據物料的供應方式來自動生成列,將資料展現在最終頁面中。
二、使用矩表控制元件實現步驟:
1. 新增 RDL 報表
2.為報表新增資料來源
3.新增資料集
在資料集視窗中輸入 SQL 語句:
select * From ClassReportDataTable.
獲取欄位
4. 新增矩表控制元件
5. 搭建報表結構
5.1 首先按照一級類別和二級類別新增行分組
選中行分組單元格,新增行分組-》子分組
5.2 新增供應方式動態列
右鍵單擊列分組單元格,選擇插入列分組,按照設計的樣式,插入三個列分組。
5.3 插入靜態列,因為這些列不會隨著資料而動態改變,所以是靜態列,只需要右鍵單擊-》插入列
到這裡,資料的基本結構就成形了,接下來需要做的就是將業務資料和矩表控制元件繫結。
5.4 資料繫結
想想原來還需要編寫各種行列轉置程式碼、生成分組程式碼,頭就疼了,現在使用矩表控制元件,直接將資料欄位拖拽到對應的單元格,就可以動態生成行列。如將 "SupplyMode" 新增到列分組單元格上,會自動根據 SupplyMode 的值來生成列數;行會根據一級類別和二級類別,自動合併相同單元格,並根據內容自動生成行資料;將欄位拖拽到單元格後,合併單元格,調整樣式。
再也不用痛苦的編寫前端顯示和超複雜的效能優化程式碼,頁面半個小時都刷不出來,使用者真的無法忍耐;現有使用比較成熟的 ActiveReports 報表控制元件,果然拖拖拽拽就解決了問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28298702/viewspace-2121898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 系統中資料顯示進行脫敏處理
- 工程管理系統原始碼-物料管理-工程專案管理系統-建築施工管理軟體原始碼專案管理
- SAP 系統中F4在幫助中顯示的物料主資料許可權控制
- win10系統如何在此電腦中顯示桌面個人資料夾Win10
- win10系統檔案資源管理器中如何在左邊顯示資料夾樹形目錄Win10
- 小程式處理大量資料列表的方法
- 大量資料如何做分頁處理
- bc搭建資料夾顯示特殊html字元處理方法HTML字元
- 如何在Tensorflow.js中處理MNIST影象資料JS
- 在Linux中,如何實時抓取並顯示當前系統中tcp 80 埠的網路資料資訊?LinuxTCP
- 前端如何處理十萬級別的大量資料前端
- 大資料處理系統有哪些大資料
- 後臺-系統-模型管理,點選資料不顯示是BUG嗎?模型
- web專案中圖示的前端處理方案Web前端
- ASP.NET Web Pages基礎知識---從文字檔案中讀取並顯示資料ASP.NETWeb
- Win10系統下如何在開始選單中顯示照片Win10
- win10 office圖示無法顯示怎麼辦 w10系統office圖示顯示不出來處理方法Win10
- 如何在高度可擴充套件的系統中管理後設資料套件
- win10系統中顯示無法找到輸出聲音裝置怎麼處理Win10
- Win10系統商店無法聯網顯示英文怎麼處理Win10
- Neofetch:在終端中顯示 Linux 系統資訊Linux
- 電影推薦系統資料預處理
- Apache Wayang :跨平臺資料處理系統Apache
- 支付類系統資料處理和資料中臺的資料處理方式有什麼不同?
- 如何在HarmonyOS NEXT中處理頁面間的資料傳遞?
- 如何在 pyqt 中捕獲並處理 Alt+F4 快捷鍵QT
- 如何在SAP裡建立configurable material物料主資料
- iPhone中XML處理以及網路上的圖片顯示iPhoneXML
- Android 介面顯示與邏輯處理Android
- 呼叫系統檔案管理器選擇圖片,呼叫系統裁剪AIP對圖片處理,顯示裁剪之後的圖片...AI
- 大資料平臺之大資料處理系統的架構大資料架構
- 籠統的資料處理
- Hadoop大資料分散式處理系統簡介Hadoop大資料分散式
- 如何在終端中顯示圖片
- Win10系統怎麼在工作管理員顯示顯示卡溫度Win10
- 如何在請求資料時,顯示載入動畫動畫
- windows10系統如何讓此電腦中的資料夾不顯示Windows
- 用Compute Shader處理影像資料後在安卓機上不能正常顯示渲染紋理安卓
- 從YYImage原始碼中學習如何處理圖片顯示原始碼