這篇文章主要介紹了在ASP.NET 2.0中如何為DataTable添加額外的列,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
于洪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!第一步:向ProductsDataTable添加一個(gè)PriceQuartile列
在第67章里我們創(chuàng)建了一個(gè)名為NorthwindWithSprocs的類型化的數(shù)據(jù)集.該數(shù)據(jù)集目前包含2個(gè)DataTables:ProductsDataTable以及 EmployeesDataTable。其中ProductsTableAdapter包含3個(gè)方法:
.GetProducts——主查詢,返回Products表的所有記錄
.GetProductsByCategoryID(categoryID)——根據(jù)指定的categoryID值返回所有產(chǎn)品
.GetProductByProductID(productID)——根據(jù)指定的productID值返回所有的產(chǎn)品
主查詢及另外2個(gè)方法都返回相同的數(shù)據(jù)列,也就是Products表的所有列,并沒(méi)有返回Categories 以及Suppliers表的相關(guān)數(shù)據(jù).
在本文,我們將向ProductsTableAdapter添加一個(gè)名為GetProductsWithPriceQuartile 的方法,它返回所有的產(chǎn)品.除了標(biāo)準(zhǔn)的數(shù)據(jù)列外,它還返回PriceQuartile列,它用四分位數(shù)來(lái)衡量產(chǎn)品價(jià)格下跌程度.如果產(chǎn)品價(jià)格上升了25%,那么其值為1,如果下降為25%,那么其值為4.在我們創(chuàng)建一個(gè)存儲(chǔ)過(guò)程來(lái)返回這種信息之前,我們首先需要更新ProductsDataTable,新添一列來(lái)包含GetProductsWithPriceQuartile方法返回的 PriceQuartile值.
打開(kāi)NorthwindWithSprocs數(shù)據(jù)集,在ProductsDataTable上右鍵單擊,選擇“ Add” ,再選擇“Column”.
圖1:向ProductsDataTable新添一列
這將向DataTable新添一列,名為“Column1”,類型為System.String.我們需要將該列的名稱改為“PriceQuartile”,類型改為System.Int32,因?yàn)樗闹到橛?到4之間.在ProductsDataTable 選中我們新添加的列,在屬性窗口里設(shè)置其Name屬性為 “PriceQuartile”,DataType屬性為System.Int32.
圖2:設(shè)置該新列的Name 和 DataType屬性
就像圖2所示,我們還可以設(shè)置其它的屬性.比如,是否該列的值必須為unique;如果該列為自增列,其值是否允許為NULL等等.不過(guò)我們這里使用其默認(rèn)值.
第二步:創(chuàng)建GetProductsWithPriceQuartile方法
現(xiàn)在我們已經(jīng)對(duì)ProductsDataTable進(jìn)行了更新以包含PriceQuartile列,我們將要?jiǎng)?chuàng)建一個(gè)GetProductsWithPriceQuartile方法.在TableAdapter上單擊右鍵,再選擇“Add Query”.這將開(kāi)啟TableAdapter查詢?cè)O(shè)置向?qū)?,它首先詢?wèn)我們是使用ad-hoc SQL statements還是使用現(xiàn)有的存儲(chǔ)過(guò)程或新建一個(gè)存儲(chǔ)過(guò)程.我們選擇“Create new stored procedure”,再點(diǎn)Next.
圖3:在TableAdapter向?qū)Ю飫?chuàng)建新的存儲(chǔ)過(guò)程
接下來(lái),如圖4所示,向?qū)г儐?wèn)我們添加的是那種類型的查詢,由于GetProductsWithPriceQuartile方法將返回Products表的所有記錄以及所有列,我們選擇“SELECT which returns rows”項(xiàng),再點(diǎn)Next.
圖4:查詢將是一個(gè)返回多個(gè)行的SELECT Statement
接下來(lái),我們?cè)谙驅(qū)Ю镦I入如下的查詢:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, NTILE(4) OVER (ORDER BY UnitPrice DESC) as PriceQuartile FROM Products
上述查詢使用了SQL Server 2005新增的NTILE function函數(shù),它將結(jié)果劃分為4組,將UnitPrice值按降序分組.
不幸的是,查詢構(gòu)造器(Query Builder)不能解析關(guān)鍵字OVER,并拋出一個(gè)錯(cuò)誤信息。因此,直接在向?qū)У奈谋究蚶镦I入上述代碼,而不要使用查詢構(gòu)造器.
注意:關(guān)于NTILE以及SQL Server 2005的其它函數(shù)的更多信息,你可參閱文章《Returning Ranked Results with Microsoft SQL Server 2005》(http://www.4guysfromrolla.com/webtech/010406-1.shtml)以及SQL Server 2005 Books Online的《Ranking Functions section》部分(http://msdn2.microsoft.com/en-us/library/ms189798.aspx)
完成后,點(diǎn)Next, 向?qū)⒁覀優(yōu)樾麓鎯?chǔ)過(guò)程重命名,我們?nèi)∶麨镻roducts_SelectWithPriceQuartile再點(diǎn)Next.
圖5:將新存儲(chǔ)過(guò)程命名為Products_SelectWithPriceQuartile
最后我們要為T(mén)ableAdapter的方法命名,選中“Fill a DataTable” 和 “Return a DataTable”兩項(xiàng),并重命名為 FillWithPriceQuartile 和GetProductsWithPriceQuartile.
圖6:對(duì)TableAdapter的方法命名并點(diǎn)Finish
當(dāng)指定了SELECT查詢,并對(duì)存儲(chǔ)過(guò)程和TableAdapter的方法命名后,點(diǎn)Finish完成向?qū)А_@時(shí)你將看到1到2條警告信息,說(shuō)“The OVER SQL construct or statement is not supported.” 不必理會(huì)它.
完成向?qū)Ш?,該TableAdapter將會(huì)包含F(xiàn)illWithPriceQuartile 和GetProductsWithPriceQuartile方法,并且數(shù)據(jù)庫(kù)將包含一個(gè)名為Products_SelectWithPriceQuartile的存儲(chǔ)過(guò)程?;c(diǎn)時(shí)間來(lái)驗(yàn)證一下,檢查數(shù)據(jù)庫(kù),如果你沒(méi)有看到我們剛添加的存儲(chǔ)過(guò)程,在存儲(chǔ)過(guò)程文件夾上右鍵單擊,選“刷新”.
圖7:驗(yàn)證新方法是否添加到TableAdapter
圖8:確保數(shù)據(jù)庫(kù)包含Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程
注意:使用存儲(chǔ)過(guò)程來(lái)替換ad-hoc SQL statements的好處之一是重新運(yùn)行TableAdapter設(shè)置向?qū)У脑挷⒉粫?huì)改動(dòng)存儲(chǔ)過(guò)程返回的列.我們可以作一個(gè)驗(yàn)證,在TableAdapter上右鍵單擊,選“Configure”項(xiàng),以啟動(dòng)向?qū)В缓簏c(diǎn)Finish完成向?qū)?。接下?lái),我們?cè)跀?shù)據(jù)庫(kù)里查看Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程.我們注意到其返回的列并沒(méi)有發(fā)生變化.如果我們使用的是ad-hoc SQL statements的話,重新運(yùn)行向?qū)?huì)使查詢返回的列與主查詢的列相匹配,因此它將把GetProductsWithPriceQuartile方法里使用的查詢里的NTILE statement刪除掉.
當(dāng)調(diào)用數(shù)據(jù)訪問(wèn)層的GetProductsWithPriceQuartile方法時(shí),TableAdapter將執(zhí)Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程,并為返回的每條記錄向ProductsDataTable添加對(duì)應(yīng)的row.存儲(chǔ)過(guò)程返回的數(shù)據(jù)域(data fields)將映射到ProductsDataTable的列.因?yàn)樵摯鎯?chǔ)過(guò)程要返回一個(gè)PriceQuartile數(shù)據(jù)域,所以它的值將分配給ProductsDataTable的PriceQuartile列.
對(duì)于那些不返回PriceQuartile數(shù)據(jù)域的方法而言,PriceQuartile列的值由其DefaultValue屬性指定. 如圖2所示,該默認(rèn)值為DBNull。如果你想指定為其他值,僅僅改動(dòng)DefaultValue屬性即可,但一定要是一個(gè)有效的值(比如,PriceQuartile列的值一定要是一個(gè)System.Int32類型的值).
現(xiàn)在我們完成了向DataTable添加額外列的必要的步驟,接下來(lái)我們要?jiǎng)?chuàng)建一個(gè)ASP.NET 頁(yè)面來(lái)展示每個(gè)產(chǎn)品的 name, price,以及price quartile.不過(guò)我們要先對(duì)業(yè)務(wù)邏輯層進(jìn)行更新,以包含一個(gè)方法來(lái)調(diào)用數(shù)據(jù)訪問(wèn)層的GetProductsWithPriceQuartile方法.我們將在第3步更新業(yè)務(wù)邏輯層,在第4步創(chuàng)建一個(gè)ASP.NET頁(yè)面.
第三步:更新業(yè)務(wù)邏輯層
我們?cè)诒憩F(xiàn)層調(diào)用新添加的GetProductsWithPriceQuartile方法以前,必須在業(yè)務(wù)邏輯層添加相應(yīng)的方法,打開(kāi)ProductsBLLWithSprocs class類文件,添加如下的代碼:
[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Select, false)] public NorthwindWithSprocs.ProductsDataTable GetProductsWithPriceQuartile() { return Adapter.GetProductsWithPriceQuartile(); }
就像其它方法一樣,GetProductsWithPriceQuartile僅僅調(diào)用數(shù)據(jù)訪問(wèn)層對(duì)應(yīng)的GetProductsWithPriceQuartile方法并返回其結(jié)果.
第四步:在一個(gè)ASP.NET頁(yè)面展示Price Quartile信息
完成對(duì)業(yè)務(wù)邏輯層的修改后,我們將創(chuàng)建一個(gè)ASP.NET頁(yè)面來(lái)顯示每個(gè)產(chǎn)品的price quartile信息.打開(kāi)AdvancedDAL文件夾里的AddingColumns.aspx頁(yè)面,從工具箱拖一個(gè) GridView控件到頁(yè)面,設(shè)置其ID為Products.在其智能標(biāo)簽里將其綁定到一個(gè)名為ProductsDataSource的新的ObjectDataSource控件,設(shè)置該控件調(diào)用ProductsBLLWithSprocs class類的GetProductsWithPriceQuartile方法,在UPDATE, INSERT,和DELETE標(biāo)簽里選“(None)”.
圖9:設(shè)置ObjectDataSource調(diào)用ProductsBLLWithSprocs類
圖10:調(diào)用GetProductsWithPriceQuartile方法獲取產(chǎn)品信息
完成設(shè)置向?qū)Ш螅?Visual Studio會(huì)為GridView添加BoundField或CheckBoxField列,其中包括PriceQuartile列. 將ProductName, UnitPrice,PriceQuartile以外的列全部刪除,設(shè)置UnitPrice列為貨幣格式.并將UnitPrice 和 PriceQuartile列放在右邊,居中。 最后分別將這3列的HeaderText屬性設(shè)置為“Product”, “Price”,“Price Quartile”。同時(shí)啟用GridView控件的排序功能.
作上述修改后, GridView 和 ObjectDataSource控件的聲明代碼看起來(lái)和下面的差不多:
<asp:GridView ID="Products" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsDataSource"> <Columns> <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice"> <ItemStyle HorizontalAlign="Right" /> </asp:BoundField> <asp:BoundField DataField="PriceQuartile" HeaderText="Price Quartile" SortExpression="PriceQuartile"> <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ProductsDataSource" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProductsWithPriceQuartile" TypeName="ProductsBLLWithSprocs"> </asp:ObjectDataSource>
如圖11為在瀏覽器里登錄該頁(yè)面的情況,我們注意到,最開(kāi)始產(chǎn)品按price的降序排列,同時(shí)每個(gè)產(chǎn)品都有相應(yīng)的PriceQuartile值,當(dāng)然這些數(shù)據(jù)也可以按其它標(biāo)準(zhǔn)來(lái)排序,如圖12所示。
圖11:產(chǎn)品按Prices來(lái)排序
圖12:產(chǎn)品按名稱來(lái)排序.
注意:只需要很少的代碼,我們就可以根據(jù)每行PriceQuartile值的不同而顯示不同的顏色,比如對(duì)值為1的行顯示為淺綠色,對(duì)值為2的行顯示為淺黃色,以此類推.你可以花點(diǎn)時(shí)間來(lái)實(shí)現(xiàn)該功能,如果有必要的話,你可以參閱第11章《基于數(shù)據(jù)的自定義格式化》
另一種途徑——?jiǎng)?chuàng)建另一個(gè)TableAdapter
正如我們?cè)诒疚目吹降?,?dāng)向TableAdapter添加的方法返回的列超出了主查詢范圍的時(shí)候,我們可以向DataTable添加相應(yīng)的列即可.對(duì)TableAdapter而言,如果當(dāng)其包含的返回“額外列”的方法較少且“額外列”不是很多的時(shí)候,這種途徑才能正常工作。
除了往DataTable添加列以外,我們還可以對(duì)DataSet添加另外的TableAdapter,其包含的方法就是那些需要返回“額外列”的方法.就本問(wèn)而言,我們可以向DataSet添加另一個(gè)名為ProductsWithPriceQuartileTableAdapter的TableAdapter,它將Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程作為它的主查詢,對(duì)要獲取price quartile信息的ASP.NET頁(yè)面來(lái)說(shuō),只需調(diào)用 ProductsWithPriceQuartileTableAdapter即可;而不需要獲取price quartile信息的頁(yè)面只需要調(diào)用ProductsTableAdapter即可.
這種另外新添加的TableAdapters可能導(dǎo)致某些功(functionality)、作業(yè)(task)重復(fù).比如,如果那些展示PriceQuartile列的頁(yè)面也要啟用insert, update,delete功能的話,那么就要對(duì)ProductsWithPriceQuartileTableAdapter的InsertCommand, UpdateCommand,DeleteCommand屬性進(jìn)行適當(dāng)?shù)脑O(shè)置.而我們已經(jīng)對(duì)ProductsTableAdapter的這3個(gè)屬性進(jìn)行過(guò)設(shè)置了,這時(shí)就有2種方法來(lái)對(duì)數(shù)據(jù)庫(kù)里的產(chǎn)品進(jìn)行添加、更新、刪除操作了——使用ProductsTableAdapter類或 ProductsWithPriceQuartileTableAdapter類.
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“在ASP.NET 2.0中如何為DataTable添加額外的列”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
本文標(biāo)題:在ASP.NET2.0中如何為DataTable添加額外的列-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://aaarwkj.com/article18/cchgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、電子商務(wù)、做網(wǎng)站、網(wǎng)站排名、搜索引擎優(yōu)化、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容