在ASP.NET 2.0中操作數(shù)據(jù)之四十六:使用SqlDataSource控件檢索數(shù)據(jù)
導(dǎo)言
到目前為止,我們探討的教程是由表現(xiàn)層,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層構(gòu)成的層次體系結(jié)構(gòu)。數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層分別在教程第一和第二章提到。在Displaying Data With the ObjectDataSource 這篇教程里,我們探討了怎樣用ASP.NET 2.0的新控件--ObjectDataSource控件在表現(xiàn)層展示數(shù)據(jù)。
本教程到目前為止用這種層次結(jié)構(gòu)來(lái)處理數(shù)據(jù)。然而繞過(guò)這種體系結(jié)構(gòu),通過(guò)直接把數(shù)據(jù)查詢(xún)和業(yè)務(wù)邏輯放在Web頁(yè)面上,也可以達(dá)到直接在ASP.NET頁(yè)面上訪問(wèn),插入,更新,刪除數(shù)據(jù)庫(kù)數(shù)據(jù)的目的。對(duì)十分龐大或者復(fù)雜的應(yīng)用程序而言,使用層次結(jié)構(gòu)對(duì)程序的成功和可維護(hù)性是很重要的。然而對(duì)很簡(jiǎn)單的程序來(lái)說(shuō),沒(méi)有必要使用層次體系結(jié)構(gòu)。
ASP.NET 2.0 提供了5個(gè)內(nèi)建的數(shù)據(jù)源控件, SqlDataSource控件, AccessDataSource控件, ObjectDataSource控件, XmlDataSource控件, 和SiteMapDataSource控件。SqlDataSource控件能直接從關(guān)系型數(shù)據(jù)庫(kù)中訪問(wèn)和更新數(shù)據(jù),包括Microsoft SQL Server,Microsoft Access, Oracle, MySQL等數(shù)據(jù)庫(kù)。在本章以及接下來(lái)的3章教程里面,我們將探討如何用SqlDataSource控件來(lái)查詢(xún)和篩選數(shù)據(jù)庫(kù)數(shù)據(jù),包括插入,更新和刪除。
圖1:ASP.NET 2.0 的5個(gè)內(nèi)建的數(shù)據(jù)源控件
比較ObjectDataSource控件和 SqlDataSource控件
從理論上說(shuō),ObjectDataSource控件和 SqlDataSource控件都是作為訪問(wèn)數(shù)據(jù)的一種代理。就象在教程Displaying Data With the ObjectDataSource中討論的那樣,可以在ObjectDataSource控件中設(shè)置展示數(shù)據(jù)的數(shù)據(jù)類(lèi)型,以及用來(lái)選擇,插入,更新和刪除數(shù)據(jù)所調(diào)用的方法。一旦完成了ObjectDataSource控件的設(shè)置,GridView, DetailsView, DataList等數(shù)據(jù)Web控件便可以通過(guò)綁定ObjectDataSource控件調(diào)用其Select(), Insert(), Delete(), 和 Update() methods方法。
雖然SqlDataSource控件具有和SqlDataSource控件同樣的功能,但使用SqlDataSource控件時(shí),我們必須提供詳細(xì)的數(shù)據(jù)庫(kù)連接字符串,以及用來(lái)執(zhí)行選擇,更新,插入,刪除數(shù)據(jù)的ad-hoc SQL查詢(xún)或存儲(chǔ)過(guò)程。當(dāng)調(diào)用SqlDataSource控件的Select(), Insert(), Update(), and Delete() 方法時(shí),SqlDataSource控件連接到數(shù)據(jù)庫(kù),并傳遞適當(dāng)?shù)腟QL查詢(xún)。下圖展示了這些方法如何連接數(shù)據(jù)庫(kù),傳遞查詢(xún)和返回結(jié)果。
圖2 SqlDataSource控件充當(dāng)訪問(wèn)數(shù)據(jù)庫(kù)的代理
注意:在本章教程中我們主要關(guān)注如何從數(shù)據(jù)庫(kù)獲得數(shù)據(jù),在后面的教程中,我們將討論如何通過(guò)設(shè)置SqlDataSource控件以支持插入,更新和刪除數(shù)據(jù)。
SqlDataSource 控件和 AccessDataSource 控件
除了 SqlDataSource 控件外,ASP.NET 2.0 還包AccessDataSource 控件。這兩種不同的控件使很多開(kāi)發(fā)者誤以為AccessDataSource 控件主要是被設(shè)計(jì)來(lái)與Microsoft Access數(shù)據(jù)庫(kù)打交道,SqlDataSource 控件主要是被設(shè)計(jì)來(lái)來(lái)與Microsoft SQL Server打交道。實(shí)際情況是,SqlDataSource 控件可以與幾乎所有.NET能訪問(wèn)的關(guān)系型數(shù)據(jù)庫(kù)打交道。包括任何 OleDb, ODBC,compliant data stores,比如:Microsoft SQL Server, Microsoft Access, Oracle, Informix, MySQL, and PostgreSQL等。
SqlDataSource 控件和 AccessDataSource 控件的唯一區(qū)別在于AccessDataSource 控件的數(shù)據(jù)庫(kù)連接信息只需要提供Access數(shù)據(jù)庫(kù)文件的訪問(wèn)路徑。而SqlDataSource 控件則需要提供完整的連接字符串。
第一步:創(chuàng)建 SqlDataSource 頁(yè)面
在我們探討用SqlDataSource控件直接操作數(shù)據(jù)庫(kù)數(shù)據(jù)之前,讓我們先花些時(shí)間在我們的站點(diǎn)項(xiàng)目里添加這些本節(jié)里和下三節(jié)里需要的ASP.NET頁(yè)面。首先添加一個(gè)名為SqlDataSource的文件夾,在里面添加下列頁(yè)面,并配置為使用Site.master母板頁(yè)。
Default.aspx
Querying.aspx
ParameterizedQueries.aspx
InsertUpdateDelete.aspx
OptimisticConcurrency.aspx
圖3:為SqlDataSource相關(guān)教程添加頁(yè)面
類(lèi)似在其它文件夾里,EditInsertDelete文件夾里的Default.aspx將列出這些教程章節(jié)。記得用戶(hù)控件提供這個(gè)功能。因此,從解決方案資源管理器中拖拽一個(gè)這個(gè)用戶(hù)控件到頁(yè)面的設(shè)計(jì)視圖,從而添加它到Default.aspx頁(yè)面
圖4:將用戶(hù)控件添加到Default.aspx頁(yè)面
最后把這4個(gè)頁(yè)面加入站點(diǎn)地圖中。打開(kāi)Web.sitemap文件并且把下列代碼加在“Adding Custom Buttons to the DataList and Repeater”siteMapNode標(biāo)記之后:
<siteMapNode url="~/SqlDataSource/Default.aspx" title="Using the SqlDataSource Control" description="Work directly with database data using the SqlDataSource control."> <siteMapNode url="~/SqlDataSource/Querying.aspx" title="Retrieving Database Data" description="Examines how to query data from a database that can then be displayed through a data Web control."/> <siteMapNode url="~/SqlDataSource/ParameterizedQueries.aspx" title="Parameterized Queries" description="Learn how to specify parameterized WHERE clauses in the SqlDataSource's SELECT statement." /> <siteMapNode url="~/SqlDataSource/InsertUpdateDelete.aspx" title="Inserting, Updating, and Deleting Database Data" description="See how to configure the SqlDataSource to include INSERT, UPDATE, and DELETE statements." /> <siteMapNode url="~/SqlDataSource/OptimisticConcurrency.aspx" title="Using Optimistic Concurrency" description="Explore how to augment the SqlDataSource to include support for optimistic concurrency." /> </siteMapNode>
圖5:更新站點(diǎn)地圖使之包含新的頁(yè)面
第二步:添加并設(shè)置 SqlDataSource控件
在SqlDataSource文件夾中打開(kāi)Querying.aspx頁(yè)面,切換到設(shè)計(jì)試圖。從工具箱中拖一個(gè)SqlDataSource控件到設(shè)計(jì)器中,設(shè)置其ID 為 ProductsDataSource。和ObjectDataSource一樣,SqlDataSource不產(chǎn)生任何的聲明標(biāo)記,所以現(xiàn)在在頁(yè)面上看起來(lái)就象一個(gè)灰色的方塊。點(diǎn)擊SqlDataSource控件的智能標(biāo)簽,點(diǎn)“Configure Data Source”鏈接,進(jìn)入數(shù)據(jù)源配置向?qū)А?/p>
圖6:在智能標(biāo)簽里點(diǎn)擊“設(shè)置數(shù)據(jù)源”鏈接。
ObjectDataSource控件和 SqlDataSource控件的配置向?qū)в行┰S不同,但最終目的都是相同的:詳細(xì)的說(shuō)明了如何從數(shù)據(jù)庫(kù)獲取,插入,更新和刪除數(shù)據(jù)。ObjectDataSource控件明確指定了要訪問(wèn)的數(shù)據(jù)庫(kù),并提供了要使用的SQL查詢(xún)聲明或存儲(chǔ)過(guò)程的詳細(xì)情況
向?qū)У牡谝徊绞沁x擇要訪問(wèn)的數(shù)據(jù)庫(kù),在下拉列表中包含了放在App_Data 文件夾中的數(shù)據(jù)庫(kù),以及添加到服務(wù)器資源管理器的數(shù)據(jù)連接節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)。一旦我們將一個(gè)連接到App_Data文件夾中的NORTHWIND.MDF數(shù)據(jù)庫(kù)的連接字符串添加到項(xiàng)目的Web.config 文件中,這個(gè)連接字符串就會(huì)出現(xiàn)在下拉列表的選項(xiàng)。如下圖,選中它,點(diǎn)“下一步”。
圖7:從下拉列表里選擇NORTHWINDConnectionString
選擇數(shù)據(jù)庫(kù)后,向?qū)мD(zhuǎn)入“如何從數(shù)據(jù)庫(kù)檢索數(shù)據(jù)”界面。有2種方式:第一種指定自定義SQL語(yǔ)句或存儲(chǔ)過(guò)程,第二種是指定來(lái)自表或視圖的列。
注意:我們先探討使用“指定來(lái)自表或視圖的列”選項(xiàng)的實(shí)例,稍后再探討用“自定義SQL語(yǔ)句或存儲(chǔ)過(guò)程”選項(xiàng)的實(shí)例。
圖8是我們點(diǎn)擊“指定來(lái)自表或視圖的列”單選按鈕時(shí)的畫(huà)面,這里我們選擇Products表,返回ProductID, ProductName和UnitPrice 列。完成選擇后,在底部的方框內(nèi)將顯示SQL語(yǔ)句: SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]
圖8:從表Products返回?cái)?shù)據(jù)。
完成上述設(shè)置后,點(diǎn)“下一步”按鈕,進(jìn)入測(cè)試查詢(xún)界面,在這里可以測(cè)試上一步所設(shè)置的查詢(xún)的結(jié)果。點(diǎn)擊“測(cè)試查詢(xún)”按鈕,執(zhí)行查詢(xún)。
圖9:點(diǎn)擊“測(cè)試”,從SELECT 查詢(xún)檢索數(shù)據(jù)。
最后,點(diǎn)“完成”按鈕完成向?qū)А?/p>
和ObjectDataSource一樣,SqlDataSource的向?qū)гO(shè)置只是完成了對(duì)SqlDataSource控件屬性的賦值而已,即ConnectionString 屬性和SelectCommand 屬性。完成設(shè)置之后,我們的SqlDataSource控件代碼應(yīng)該和下面的差不多:
<asp:SqlDataSource ID="ProductsDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"> </asp:SqlDataSource>
其中ConnectionString屬性提供了怎樣連接數(shù)據(jù)庫(kù)的詳細(xì)信息,可以用完整的,硬編碼的連接字符串對(duì)其賦值,也可以用Web.config文件中的連接字符串來(lái)賦值。當(dāng)用Web.config文件中的字符串時(shí),語(yǔ)法為:<%$ expressionPrefix:expressionValue %>,特別地expressionPrefix就是“ConnectionStrings”,而expressionValue 則是Web.config文件<connectionStrings>部分中,連接字符串的名字。關(guān)于此語(yǔ)法的更多信息請(qǐng)參考: ASP.NET Expressions Overview
而SelectCommand屬性是SQL查詢(xún)語(yǔ)句或存儲(chǔ)過(guò)程的詳細(xì)陳述。
第三步:添加數(shù)據(jù)Web控件并綁定到SqlDataSource
一旦設(shè)置好SqlDataSource后,就可以用GridView 或DetailsView等數(shù)據(jù)Web控件綁定它。在本篇教程中我們使用GridView,從工具箱拖一個(gè)GridView控件到頁(yè)面上,在智能標(biāo)簽中的“選擇數(shù)據(jù)源”里選ProductsDataSource ,這樣就將GridView控件綁定到我們前面設(shè)置的SqlDataSource控件了。
圖10:添加GridView控件并綁定到SqlDataSource
完成綁定后,Visual Studio 會(huì)自動(dòng)為GridView從數(shù)據(jù)源控件返回的每一列添加一個(gè)BoundField 或CheckBoxField 。就本文來(lái)說(shuō)既然SqlDataSource從數(shù)據(jù)庫(kù)返回三列:ProductID, ProductName, 和 UnitPrice ,那么Visual Studio就在自動(dòng)在GridView中生成三列(three fields )。
花幾分鐘來(lái)設(shè)置GridView的三個(gè)BoundFields:把ProductName field的HeaderText 屬性設(shè)置為“Product Name”,UnitPrice field設(shè)置為“Price”,同時(shí)格式化為貨幣形式。修改后,你的GridView代碼看起來(lái)應(yīng)該象下面這樣:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsDataSource" EnableViewState="False"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="Product Name" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" HeaderText="Price" SortExpression="UnitPrice" DataFormatString="{0:c}" HtmlEncode="False" /> </Columns> </asp:GridView>
在瀏覽器中瀏覽本頁(yè),如圖11所示,GridView列出了每個(gè)產(chǎn)品的ProductID, ProductName, 和UnitPrice。
圖11:GridView里列出了每個(gè)產(chǎn)品的ProductID, ProductName, 和UnitPrice。
測(cè)試該頁(yè)面時(shí),GridView調(diào)用其數(shù)據(jù)源控件的Select()方法。如果我們使用ObjectDataSource控件來(lái)測(cè)試該頁(yè)面的話,它將會(huì)調(diào)用邏輯層ProductsBLL class的GetProducts() 方法。而用SqlDataSource控件的話,其Select()方法將直接鏈接到要訪問(wèn)的數(shù)據(jù)庫(kù),并傳遞SelectCommand(具體就本例而言,傳遞的是SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products])。SqlDataSource將返回的結(jié)果傳遞給GridView,后者根據(jù)從數(shù)據(jù)庫(kù)返回的每一條記錄生產(chǎn)一行(a row)
SqlDataSource控件及數(shù)據(jù)Web控件的內(nèi)置屬性
一般來(lái)說(shuō),數(shù)據(jù)Web控件的分頁(yè),排序,編輯,插入,刪除等屬性是由數(shù)據(jù)Web控件自身指定的,跟它所使用的數(shù)據(jù)源控件沒(méi)有太大關(guān)系。也就是說(shuō),GridView可以自由的啟用它內(nèi)建的分頁(yè),排序,編輯和刪除功能,而不管它到底是綁定到SqlDataSource控件還是ObjectDataSource控件。然而,數(shù)據(jù)Web控件的某些屬性卻要受其綁定的數(shù)據(jù)源控件及其設(shè)置的影響。
比如, 就像我們?cè)贓fficiently Paging Through Large Amounts of Data 這章教程中探討的那樣,在啟用分頁(yè)功能后,在默認(rèn)情況下,每次跳轉(zhuǎn)頁(yè)面時(shí),數(shù)據(jù)Web控件都會(huì)對(duì)所有的記錄重新檢索,盡管我們只需要顯示特定的那幾條記錄。這種模式在要檢索的數(shù)據(jù)量很大的情況下,效率會(huì)很低。不過(guò)ObjectDataSource控件可以通過(guò)自定義分頁(yè)的方法僅僅返回那些需要在當(dāng)前頁(yè)面上顯示的記錄,很遺憾的是SqlDataSource控件不支持自定義分頁(yè)功能。
在默認(rèn)情況下,SqlDataSource控件返回的數(shù)據(jù)可以通過(guò)GridView控件來(lái)進(jìn)行分頁(yè)和排序。來(lái)做個(gè)示范,在Querying.aspx 頁(yè)面中,在GridView控件的智能標(biāo)簽里啟用分頁(yè)和排序功能,看它是否象我們期望的那樣工作。
分頁(yè)和排序的原理在于SqlDataSource控件將檢索的數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)換成“泛型數(shù)據(jù)集”(loosely-typed DataSet)。那些被用來(lái)分頁(yè)的每條記錄就蘊(yùn)含
在數(shù)據(jù)集里面,此外,數(shù)據(jù)集支持對(duì)返回的結(jié)果進(jìn)行排序。當(dāng)GridView請(qǐng)求對(duì)數(shù)據(jù)分頁(yè)或排序時(shí),SqlDataSource控件自動(dòng)完成上述工作。
在默認(rèn)情況下,SqlDataSource返回的是數(shù)據(jù)集(DataSet),你也可以使它返回一個(gè)DataReader ,方法是把它的DataSourceMode屬性設(shè)置為“DataReader”。當(dāng)希望把DataReader的檢索結(jié)果轉(zhuǎn)換為現(xiàn)成的代碼(existing code )時(shí),設(shè)置為DataReader往往是首選。另外DataReader比起DataSet來(lái)簡(jiǎn)單的多,功能更強(qiáng)大。不過(guò)將DataSourceMode屬性設(shè)置為“DataReader”后,數(shù)據(jù)Web控件便不能啟用分頁(yè)或排序功能,因?yàn)镾qlDataSource無(wú)法得知總共返回了多少條記錄,并且DataReader也不支持對(duì)返回的數(shù)據(jù)排序。
第四步:使用自定義的SQL查詢(xún)或存儲(chǔ)過(guò)程
前面講到,SqlDataSource控件從數(shù)據(jù)庫(kù)檢索數(shù)據(jù)的方法有2種。在第二步我們探討了從表Products返回?cái)?shù)據(jù)的方法,現(xiàn)在我們探討用自定義SQL查詢(xún)的情況。
在Querying.aspx添加一個(gè)新的GridView控件,在其智能標(biāo)簽的下拉列表中選擇“新建數(shù)據(jù)源”,在“選擇數(shù)據(jù)源類(lèi)型”界面中選“database”,將數(shù)據(jù)源ID設(shè)置為“ProductsWithCategoryInfoDataSource”。
圖12:創(chuàng)建一個(gè)新的SqlDataSource控件,并命名為ProductsWithCategoryInfoDataSource
下一步,接著會(huì)詢(xún)問(wèn)使用哪個(gè)數(shù)據(jù)連接,就想我們?cè)趫D7做的那樣,在下拉列表中選擇NORTHWINDConnectionString,點(diǎn)下一步,在配置SQL語(yǔ)句界面中,選擇“指定自定義SQL語(yǔ)句或存儲(chǔ)過(guò)程”,點(diǎn)下一步,進(jìn)入“定義自定義語(yǔ)句或存儲(chǔ)過(guò)程”界面,包含“選擇”,“更新”,“刪除”,“插入”四個(gè)選項(xiàng)卡,在每個(gè)選項(xiàng)卡中,你可以在文本框中輸入自定義SQL語(yǔ)句,或者在下拉列表中選擇存儲(chǔ)過(guò)程。本章我們討論輸入自定義SQL語(yǔ)句,在下面的教程中再探討使用存儲(chǔ)過(guò)程的情況。
圖13:輸入自定義SQL語(yǔ)句或選擇某個(gè)存儲(chǔ)過(guò)程
可以手工輸入自定義SQL語(yǔ)句,也可以借助于查詢(xún)生成器來(lái)輔助生成。不管用哪種,都應(yīng)使用如下查詢(xún):
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID
圖14:使用查詢(xún)生成器圖像化的構(gòu)造查詢(xún)
點(diǎn)下一步進(jìn)入“測(cè)試查詢(xún)”界面,點(diǎn)“完成”結(jié)束設(shè)置。完成設(shè)置后,GridView的代碼應(yīng)該看起來(lái)象下面這樣:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsWithCategoryInfoDataSource" EnableViewState="False"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="ProductsWithCategoryInfoDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" SelectCommand=" SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID"> </asp:SqlDataSource>
圖15:GridView顯示了每個(gè)產(chǎn)品的ID, Name和Category Name
總結(jié):
在本章我們探討了怎樣用SqlDataSource控件查詢(xún)和顯示數(shù)據(jù)。和ObjectDataSource控件一樣,它們都是作為一種訪問(wèn)數(shù)據(jù)庫(kù)的代理。我們可以在屬性窗口中或通過(guò)設(shè)置它的數(shù)據(jù)源向?qū)?,?lái)指定它要連接的數(shù)據(jù)庫(kù)以及要執(zhí)行的SQL選擇查詢(xún)(SQL SELECT query)
本文所探討的SQL選擇查詢(xún)實(shí)例從指定的查詢(xún)返回所以的記錄,實(shí)際上SqlDataSource控件還可以包含一個(gè)帶參數(shù)的WHERE字句。我們將在下一章探討帶參數(shù)的查詢(xún)。
祝編程快樂(lè)!
作者簡(jiǎn)介
本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書(shū),是4GuysFromRolla.com的創(chuàng)始人,自1998年以來(lái)一直應(yīng)用 微軟Web技術(shù)。大家可以點(diǎn)擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對(duì)大家的學(xué)習(xí)ASP.NET有所幫助。
相關(guān)文章
解讀ASP.NET 5 & MVC6系列教程(10):Controller與Action
這篇文章主要介紹了ASP.NET 5 Controller與Action的定義和使用,需要的朋友可以參考下2016-06-06在ASP.NET 2.0中操作數(shù)據(jù)之六十六:在TableAdapters中使用現(xiàn)有的存儲(chǔ)過(guò)程
雖然通過(guò)TableAdapter向?qū)Э梢宰詣?dòng)的生成存儲(chǔ)過(guò)程,但是在某些時(shí)候我們需要使用現(xiàn)有的存儲(chǔ)過(guò)程。本文將講解如何在Visual Studio環(huán)境里手動(dòng)添加存儲(chǔ)過(guò)程,并引導(dǎo)TableAdapter的方法使用這些存儲(chǔ)過(guò)程。2016-05-05ASP.NET MVC4入門(mén)教程(四):添加一個(gè)模型
本文主要介紹在MVC4中如何添加一個(gè)模型(Model),這個(gè)類(lèi)負(fù)責(zé)和數(shù)據(jù)庫(kù)交互,主要處理一些增刪改查的操作。2016-04-04NopCommerce架構(gòu)分析之(六)自定義RazorViewEngine和WebViewPage
本文對(duì)NopCommerce的后臺(tái)分離技術(shù)做簡(jiǎn)單的探討。NopCommerce通過(guò)自定義視圖引擎,重寫(xiě)了VirtualPathProviderViewEngine類(lèi)的CreateView、CreatePartialView、FindView、FindPartialView方法,添加自定義的視圖搜索路徑來(lái)實(shí)現(xiàn)后臺(tái)分離。2016-04-04使用.Net6中的WebApplication打造最小API
本文詳細(xì)講解了使用.Net6中的WebApplication打造最小API,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12在ASP.NET 2.0中操作數(shù)據(jù)之六十二:GridView批量更新數(shù)據(jù)
GridView控件內(nèi)置的編輯功能只能對(duì)每行進(jìn)行編輯,做不到批量編輯。為此,我們需要將GridView里的列轉(zhuǎn)換為T(mén)emplateFields,通過(guò)一個(gè)單獨(dú)的“Update All”按鈕,在按鈕的事件中批量處理每一行。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之四十三:DataList和Repeater數(shù)據(jù)排序(二)
上篇已經(jīng)介紹了DropDownList隱式使用ViewState,本文主要介紹詳細(xì)介紹直接使用ViewState存儲(chǔ)排序的條件,并配合上一頁(yè)、下一頁(yè)按鈕,實(shí)現(xiàn)DataList和Repeater自定義排序的功能。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之十七:研究插入、更新和刪除的關(guān)聯(lián)事件
本文主要講解ASP.NET 2.0中如何在點(diǎn)擊插入、更新、刪除等按鈕時(shí)關(guān)聯(lián)和觸發(fā)事件,以便我們?cè)谑录袑?xiě)代碼,實(shí)現(xiàn)我們期望的效果。2016-05-05我今天開(kāi)始正式學(xué)習(xí).net遇到的問(wèn)題
我今天開(kāi)始正式學(xué)習(xí).net遇到的問(wèn)題...2006-10-10