什么是ASP.NET DataGrid控件:完全模板化的網(wǎng)格
ASP.NET DataGrid控件呈現(xiàn)一個多列、完全模板化的網(wǎng)格,它是 .NET 框架中所有數(shù)據(jù)綁定 Web 控件中最通用和最靈活的控件。DataGrid 的用戶界面在某種程度上類似于 Microsoft Excel 工作表。盡管 DataGrid 具有高級的編程接口以及完整的屬性集,但是它只生成包含交錯超級鏈接的 HTML 表,從而提供互操作功能(例如,排序和分頁命令)。
使用 DataGrid 控件,可以創(chuàng)建簡單的數(shù)據(jù)綁定列(顯示從數(shù)據(jù)源檢索的數(shù)據(jù))、模板化列(允許您設(shè)計單元格內(nèi)容的布局),***但也很重要的是基于命令的列(允許您向網(wǎng)格中添加特定的功能)。
DataGrid 控件很適合報告數(shù)據(jù),而且其足夠的靈活性允許您構(gòu)建復(fù)雜且具有專業(yè)外觀的數(shù)據(jù)表,在這些數(shù)據(jù)表中,可隨意實現(xiàn)諸如分頁和排序之類的功能。然而,其他功能(例如,深化和主/細)只需要較少的工作。在本月的專欄中,我將討論一個無法由該控件本身提供、但是頗受許多人歡迎的功能。因此,讓我們研究一下如何自動生成復(fù)雜的報表,在這些表中,必須顯示具有部分合計的匯總行。
ASP.NET DataGrid控件
可通過設(shè)置 DataGrid 控件的 DataSource 屬性來將實際數(shù)據(jù)綁定到該控件的實例。此屬性是一般的 Object 類型,并且支持兩個配置方案。通常用實現(xiàn) ICollection 接口的數(shù)據(jù)對象來設(shè)置它。通常將使用 DataTable 和 DataView 對象。另一種方法是,用另一個對象類型(例如,data reader 對象)來設(shè)置它。不過,在這種情況下,必須打開自定義分頁機制;否則將引發(fā)異常。簡單地說,您要么將 DataGrid 綁定到分頁數(shù)據(jù)源(即用來實現(xiàn)枚舉數(shù)的集合對象),要么必須為自己提供分頁。
對于 Web 控件,數(shù)據(jù)綁定處于啟用狀態(tài),只有在調(diào)用 DataBind 方法時,用戶界面才進行刷新。在刷新過程中,該控件會遍歷數(shù)據(jù)源并將一些行復(fù)制到它的 Items 集合中。Items 屬性代表當前顯示頁的內(nèi)容。如果數(shù)據(jù)源支持分頁(即,實現(xiàn) ICollection),則 DataGrid 從 DataSource 選擇適合當前頁的正確行子集。否則,它假設(shè) DataSource 的全部內(nèi)容都適合當前頁并將它們?nèi)考虞d到 Items 中。在填充完 Items 之后,就會呈現(xiàn)該控件的用戶界面。
此處有何教訓(xùn)?DataGrid 控件能夠安全而又一致地顯示的全部內(nèi)容就是綁定數(shù)據(jù)源中包含的行。因此,如果您希望插入?yún)R總行,以便按照公共鍵對某些記錄進行分組并顯示部分合計,則必須指出將這些匯總行直接插入數(shù)據(jù)源的方法。
然而,將匯總行插入數(shù)據(jù)源是不夠的。實際上,必須能夠區(qū)分匯總行和普通行,并用不同的視覺樣式呈現(xiàn)前者。
在將數(shù)據(jù)附加到該控件之前,確保數(shù)據(jù)源包含其所需的所有匯總行。接著,掛鉤 ItemCreated 事件,檢測每個匯總行,然后用不同的布局和樣式繪制它們。讓我們看一看如何在 SQL 查詢的不同行之間插入?yún)R總行。我將使用基于 Northwind SQL Server 數(shù)據(jù)庫的示例應(yīng)用程序來闡釋我的觀點。該應(yīng)用程序列出每個客戶已在給定年份發(fā)出的所有定單。定單按年份和客戶 ID 進行分組。對于每個客戶,都額外有一行來匯總定單的總數(shù)和總額。
以上就介紹了ASP.NET DataGrid控件的基本知識。
【編輯推薦】