使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)_第1頁(yè)
使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)_第2頁(yè)
使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)_第3頁(yè)
使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)_第4頁(yè)
使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用 DataGrid Web 控件讀取和寫(xiě)入數(shù)據(jù)Web 窗體數(shù)據(jù)綁定的結(jié)構(gòu)便于在頁(yè)控件中顯示數(shù)據(jù)。但是,數(shù)據(jù)綁定不是雙向的,也就是說(shuō),數(shù)據(jù)綁定從數(shù)據(jù)源讀取數(shù)據(jù)但不對(duì)其進(jìn)行更新。更新比顯示數(shù)據(jù)更復(fù)雜,因?yàn)榇蠖鄶?shù) Web 窗體頁(yè)不需要將數(shù)據(jù)寫(xiě)回源,所以 Web 窗體數(shù)據(jù)綁定通過(guò)不包括更新代碼將頁(yè)大小和頁(yè)處理保持在最精簡(jiǎn)的程度。當(dāng)然,有時(shí)候您要?jiǎng)?chuàng)建更新數(shù)據(jù)的 Web 窗體頁(yè)。本演練闡釋完成該目的的一種方式。它說(shuō)明了如何使用 DataGrid 控件顯示數(shù)據(jù),允許用戶(hù)對(duì)其進(jìn)行編輯,然后將更改的數(shù)據(jù)發(fā)送回源。當(dāng)該頁(yè)運(yùn)行時(shí),它看起來(lái)類(lèi)似于下面這樣:若要完成本演練,您需要: · 訪(fǎng)問(wèn)帶有 Nort

2、hwind SQL Server 示例數(shù)據(jù)庫(kù)的服務(wù)器。 · 充足的權(quán)限,以便在 Web 服務(wù)器所在的計(jì)算機(jī)上創(chuàng)建 ASP.NET Web 應(yīng)用程序項(xiàng)目。 演練被分成若干較小的部分: · 創(chuàng)建 Web 窗體頁(yè)。 · 添加必要的數(shù)據(jù)組件。 · 添加顯示數(shù)據(jù)的 DataGrid 控件。 · 添加從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)并將網(wǎng)格綁定到數(shù)據(jù)的代碼。 · 配置 DataGrid 控件以允許用戶(hù)編輯數(shù)據(jù)。 · 添加更新數(shù)據(jù)的代碼。 創(chuàng)建項(xiàng)目和窗體第一步是創(chuàng)建 Web 應(yīng)用程序和 Web 窗體頁(yè)。創(chuàng)建項(xiàng)目和窗體 1. 在“文件”菜單上指向“新建”,

3、然后單擊“項(xiàng)目”。 2. 在“新建項(xiàng)目”對(duì)話(huà)框中,請(qǐng)執(zhí)行以下操作: a. 在“項(xiàng)目類(lèi)型”窗格中選擇“Visual Basic 項(xiàng)目”或“Visual C# 項(xiàng)目”。 b. 在“模板”窗格中選擇“ASP.NET Web 應(yīng)用程序”。 c. 在“位置”框中,為您的應(yīng)用程序輸入完整的 URL(包含 http:/、服務(wù)器名稱(chēng)和項(xiàng)目名稱(chēng))。Web 服務(wù)器上必須安裝 IIS 5 版(或更高版本)和 .NET 框架。如果計(jì)算機(jī)上已安裝 IIS,可以為服務(wù)器指定 http:/localhost。 當(dāng)單擊“確定”時(shí),將在您指定的 Web 服務(wù)器的根處創(chuàng)建新的 Web 窗體項(xiàng)目。此外,名為 WebForm1.as

4、px 的新 Web 窗體頁(yè)將顯示在“設(shè)計(jì)”視圖中 Web 窗體設(shè)計(jì)器上。 提示 如果在創(chuàng)建 Web 應(yīng)用程序項(xiàng)目方面有困難,請(qǐng)參閱“Web 訪(fǎng)問(wèn)失敗”對(duì)話(huà)框。創(chuàng)建和配置數(shù)據(jù)集在 Web 窗體頁(yè)中,有多種訪(fǎng)問(wèn)數(shù)據(jù)的方法選擇。一種方法是使用數(shù)據(jù)集,它是內(nèi)存中的數(shù)據(jù)緩存。另外,您可以使用執(zhí)行 SQL 語(yǔ)句或存儲(chǔ)過(guò)程的數(shù)據(jù)命令直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。一般情況下,使用數(shù)據(jù)集便于更新數(shù)據(jù),這也正是您將在本演練中使用的方法。有關(guān)更多信息,請(qǐng)參閱 Web 數(shù)據(jù)訪(fǎng)問(wèn)策略建議。您不直接將數(shù)據(jù)集添加到頁(yè)。相反,您將執(zhí)行下列一組步驟: 1. 使用向?qū)?chuàng)建數(shù)據(jù)適配器。該適配器包含用于讀取和寫(xiě)入數(shù)據(jù)庫(kù)信息的 SQL 語(yǔ)句。該向?qū)?/p>

5、幫助您定義所需的 SQL 語(yǔ)句。如有必要,該向?qū)н€創(chuàng)建與數(shù)據(jù)庫(kù)的連接。 2. 生成數(shù)據(jù)集架構(gòu)。在本過(guò)程中,您將讓 Visual Studio 基于您正在訪(fǎng)問(wèn)的表和列創(chuàng)建一個(gè)新的數(shù)據(jù)集類(lèi)。在生成數(shù)據(jù)集類(lèi)時(shí),您還將向窗體中添加該類(lèi)的一個(gè)實(shí)例。 遵循本節(jié)中的所有過(guò)程很重要。否則,您的頁(yè)將不具有在本演練的隨后部分中將使用的數(shù)據(jù)集。有關(guān)數(shù)據(jù)適配器的概述,請(qǐng)參閱數(shù)據(jù)適配器介紹。有關(guān)數(shù)據(jù)集的概述,請(qǐng)參閱數(shù)據(jù)集介紹。配置數(shù)據(jù)連接和數(shù)據(jù)適配器若要開(kāi)始,請(qǐng)創(chuàng)建一個(gè)包含稍后用于填充數(shù)據(jù)集的 SQL 語(yǔ)句的數(shù)據(jù)適配器。作為此過(guò)程的一部分,定義連接以訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。使用向?qū)渲脭?shù)據(jù)適配器,該向?qū)箘?chuàng)建數(shù)據(jù)訪(fǎng)問(wèn)所需的 SQL

6、 語(yǔ)句變得容易。 注意 向?qū)瓿珊螅仨毨^續(xù)下一部分操作,以便生成數(shù)據(jù)集并完成該頁(yè)的數(shù)據(jù)訪(fǎng)問(wèn)部分。創(chuàng)建數(shù)據(jù)連接和數(shù)據(jù)適配器 1. 從工具箱的“數(shù)據(jù)”選項(xiàng)卡中,將一個(gè) SqlDataAdapter 對(duì)象拖到頁(yè)上。 注意 如果您未使用 SQL Server,則應(yīng)使用類(lèi)型 OleDbDataAdapter 的適配器,它提供到任何與 OLE DB 兼容的數(shù)據(jù)源的訪(fǎng)問(wèn)。“數(shù)據(jù)適配器配置向?qū)А眴?dòng),它將幫助您創(chuàng)建連接和適配器。 2. 在該向?qū)е?,?zhí)行下列操作: a. 在第二個(gè)窗格中,創(chuàng)建或選擇一個(gè)指向 SQL Server Northwind 數(shù)據(jù)庫(kù)的連接。有關(guān)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的信息,請(qǐng)與您的數(shù)據(jù)庫(kù)管理員聯(lián)系

7、。 注意 您需要在所使用的 SQL Server 上具有適當(dāng)?shù)淖x/寫(xiě)權(quán)限。建議在創(chuàng)建連接時(shí)指定 Windows 集成安全性?;蛘撸梢灾付ㄓ脩?hù)名和密碼并將該信息與此連接保存在一起,但這樣做會(huì)危及安全性。有關(guān)更多信息,請(qǐng)參閱數(shù)據(jù)庫(kù)安全性。b. 在第三個(gè)窗格中,指定您要使用 SQL 語(yǔ)句訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。 c. 在第四個(gè)窗格中創(chuàng)建以下 SQL 語(yǔ)句: d. SELECT CategoryID, CategoryName, DescriptionFROM Categories有關(guān)如何生成 SQL 語(yǔ)句的幫助,請(qǐng)單擊“查詢(xún)生成器”啟動(dòng)“查詢(xún)生成器”對(duì)話(huà)框。 注意 在本演練中,將使用類(lèi)別表中的所有行來(lái)填充數(shù)據(jù)

8、集。在成品應(yīng)用程序中,通常通過(guò)創(chuàng)建只返回所需列和行的查詢(xún)來(lái)優(yōu)化數(shù)據(jù)訪(fǎng)問(wèn)。有關(guān)示例,請(qǐng)參閱演練:使用參數(shù)化查詢(xún)?cè)?Windows 窗體中顯示數(shù)據(jù)。e. 單擊“完成”。 向?qū)?chuàng)建一個(gè)連接(SqlConnection1 或 sqlConnection1),它包含有關(guān)如何訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的信息。您還將具有包含一個(gè)查詢(xún)的數(shù)據(jù)適配器(SqlDataAdapter1 或 sqlDataAdapter1),該查詢(xún)定義所要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)中的表和列。 向?qū)瓿珊?,您需要基于在該過(guò)程中創(chuàng)建的 SQL 查詢(xún)生成數(shù)據(jù)集。有關(guān)詳細(xì)信息,請(qǐng)參閱下一節(jié)。創(chuàng)建數(shù)據(jù)集建立連接到數(shù)據(jù)庫(kù)的方法并指定所需的信息(通過(guò)數(shù)據(jù)適配器中的 SQL 命令

9、)后,可以讓 Visual Studio 創(chuàng)建數(shù)據(jù)集。Visual Studio 可以基于您為數(shù)據(jù)適配器指定的查詢(xún)自動(dòng)生成數(shù)據(jù)集。數(shù)據(jù)集是基于相應(yīng)架構(gòu)(.xsd 文件)的 DataSet 類(lèi)的一個(gè)實(shí)例,該架構(gòu)描述類(lèi)的元素(表、列和約束)。有關(guān)數(shù)據(jù)集與架構(gòu)之間關(guān)系的詳細(xì)信息,請(qǐng)參閱 ADO.NET 數(shù)據(jù)訪(fǎng)問(wèn)介紹。生成數(shù)據(jù)集 1. 從“數(shù)據(jù)”菜單中選擇“生成數(shù)據(jù)集”。 提示 如果“生成數(shù)據(jù)集”命令未啟用,則單擊該頁(yè);頁(yè)必須具有焦點(diǎn),該命令才會(huì)出現(xiàn)?!吧蓴?shù)據(jù)集”對(duì)話(huà)框出現(xiàn)。 2. 選擇“新建”選項(xiàng),將該數(shù)據(jù)集命名為 dsCategories。 在“選擇要添加到數(shù)據(jù)集中的表”下面的列表中,確保選擇了

10、 Categories 表。 3. 確?!皩⒋藬?shù)據(jù)集添加到設(shè)計(jì)器”已選中,然后單擊“確定”。 Visual Studio 生成某類(lèi)型化數(shù)據(jù)集類(lèi) (dsCategories) 和定義該數(shù)據(jù)集的架構(gòu)。您將在解決方案資源管理器中看到新的架構(gòu) (dsCategories.xsd)。 提示 在解決方案資源管理器中,單擊“顯示所有文件”工具欄按鈕以查看架構(gòu)文件的相關(guān) .vb 或 .cs 文件,該文件包含定義新數(shù)據(jù)集類(lèi)的代碼。最后,Visual Studio 將新數(shù)據(jù)集類(lèi) (dsCategories1) 的實(shí)例添加到頁(yè)上。 此刻,為執(zhí)行從數(shù)據(jù)庫(kù)獲取信息并轉(zhuǎn)移到數(shù)據(jù)集的操作所需的全部設(shè)置均已完成。添加顯示數(shù)據(jù)

11、的 DataGrid 控件在本演練中,您將添加單個(gè)控件(DataGrid 控件),該控件可以同時(shí)顯示數(shù)據(jù)集中的所有記錄并允許您添加編輯記錄的功能。數(shù)據(jù)網(wǎng)格必須綁定到數(shù)據(jù)集才能顯示數(shù)據(jù)。 向窗體添加綁定 DataGrid 控件 1. 如果尚未進(jìn)行該操作,請(qǐng)單擊當(dāng)前窗口頂部的選項(xiàng)卡切換到 Web 窗體設(shè)計(jì)器。 2. 從工具箱的“Web 窗體”選項(xiàng)卡中,將一個(gè) DataGrid 控件拖到窗體上。 3. 選擇該控件,按 F4 鍵顯示“屬性”窗口,在窗口的底部,單擊“屬性生成器”。 “DataGrid 屬性”對(duì)話(huà)框出現(xiàn)。 4. 在“常規(guī)”選項(xiàng)卡中,完成以下設(shè)置: 屬性設(shè)置說(shuō)明數(shù)據(jù)源dsCategorie

12、s1將網(wǎng)格綁定到數(shù)據(jù)集。數(shù)據(jù)成員Categories指定網(wǎng)格應(yīng)該顯示數(shù)據(jù)集的類(lèi)別表中的數(shù)據(jù)數(shù)據(jù)鍵字段CategoryID指定類(lèi)別記錄的主鍵是 CategoryID 列。這將允許您稍后確定更新數(shù)據(jù)集中的哪個(gè)記錄。5. 單擊“確定”關(guān)閉“DataGrid 屬性”對(duì)話(huà)框。 6. 如果您要更改網(wǎng)格的外觀(guān),請(qǐng)?jiān)O(shè)置“字體”、“背景色”和其他屬性。 提示 一種簡(jiǎn)單的設(shè)置網(wǎng)格外觀(guān)的方法是單擊“屬性”窗口底部的“自動(dòng)套用格式”,然后選擇預(yù)定義的外觀(guān)。填充數(shù)據(jù)集并在 DataGrid 控件中顯示數(shù)據(jù)盡管網(wǎng)格被綁定到所創(chuàng)建的數(shù)據(jù)集,但是,數(shù)據(jù)集本身不會(huì)被自動(dòng)填寫(xiě)。相反,您必須自己調(diào)用數(shù)據(jù)適配器方法來(lái)填充數(shù)據(jù)集。有關(guān)

13、填充數(shù)據(jù)集的詳細(xì)信息,請(qǐng)參閱數(shù)據(jù)集介紹。即使在數(shù)據(jù)集被填充后,DataGrid 控件仍不會(huì)自動(dòng)顯示數(shù)據(jù)。您必須將網(wǎng)格顯式綁定到它的數(shù)據(jù)源。有關(guān)更多信息,請(qǐng)參閱 Web 窗體頁(yè)中的數(shù)據(jù)綁定介紹。填充數(shù)據(jù)集并在 DataGrid 控件中顯示數(shù)據(jù) 1. 雙擊當(dāng)前頁(yè),在代碼編輯器中顯示該頁(yè)的類(lèi)文件。 2. 在 Page_Load 事件處理程序中,調(diào)用數(shù)據(jù)適配器的 Fill 方法并向其傳遞要填充的數(shù)據(jù)集: 3. ' Visual Basic4. SqlDataAdapter1.Fill(DsCategories1)5.6. /C#sqlDataAdapter1.Fill(dsCategories

14、1);7. 調(diào)用 DataGrid 控件的 DataBind 方法,將該控件綁定到數(shù)據(jù)集。但是,您不想在頁(yè)每次進(jìn)行往返行程時(shí)都重新綁定控件,因?yàn)槿绻@樣做,將丟失用戶(hù)已在網(wǎng)格中進(jìn)行的更改。因此,您應(yīng)該只在以下這些情況下綁定網(wǎng)格: · 第一次調(diào)用頁(yè)時(shí)。 · 數(shù)據(jù)集更改時(shí)。 現(xiàn)在,您要在第一次調(diào)用頁(yè)時(shí)綁定網(wǎng)格,這可以通過(guò)測(cè)試頁(yè)的 IsPostBack 屬性完成。在調(diào)用了適配器的 Fill 方法之后將代碼添加到 Page_Load 事件處理程序。完整的處理程序看起來(lái)將類(lèi)似于下面這樣: ' Visual BasicPrivate Sub Page_Load(ByVal se

15、nder As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here SqlDataAdapter1.Fill(DsCategories1) If Not IsPostBack Then DataGrid1.DataBind() End IfEnd Sub/ C#private void Page_Load(object sender, System.EventArgs e) / Put user code to initial

16、ize the page here sqlDataAdapter1.Fill(dsCategories1); if (!IsPostBack) DataGrid1.DataBind(); 添加編輯數(shù)據(jù)的功能按照配置,DataGrid 控件將顯示 Categories 表中的信息。但您還希望用戶(hù)可以逐個(gè)編輯網(wǎng)格中的行。要實(shí)現(xiàn)該目的,向網(wǎng)格的每一行添加一個(gè)“編輯”按鈕。用戶(hù)單擊該按鈕,網(wǎng)格以編輯模式重新顯示,用戶(hù)可以在文本框中逐個(gè)編輯列。當(dāng)行處于編輯模式時(shí),“編輯”按鈕由另外兩個(gè)按鈕(一個(gè)“更新”按鈕和一個(gè)“取消”按鈕)代替,如下圖所示:您可以設(shè)置 DataGrid 控件的屬性顯示這些按鈕。但是,

17、這些按鈕不是自動(dòng)建立連接的;相反,當(dāng)單擊“編輯”、“取消”或“更新”按鈕時(shí),它引發(fā)您響應(yīng)的事件。您需要添加短事件處理程序,它們完成以下操作: · “編輯”按鈕設(shè)置當(dāng)前行進(jìn)入編輯模式。 · “取消”按鈕將當(dāng)前行返回顯示模式。 “更新”按鈕的事件處理程序更復(fù)雜,這是因?yàn)樗鼒?zhí)行更新,而這正是本演練的核心。閱讀下一節(jié),您將了解有關(guān)這方面的內(nèi)容。向 DataGrid 控件添加編輯功能 1. 在 Web 窗體設(shè)計(jì)器的“設(shè)計(jì)”視圖中,選擇 DataGrid 控件,按 F4 鍵顯示“屬性”窗口,然后單擊該窗口底部的“屬性生成器”。 “DataGrid 屬性”對(duì)話(huà)框顯示。 2. 單擊“列”選

18、項(xiàng)卡。 3. 在“列”列表下面,在“可用列”列表中向下滾動(dòng),打開(kāi)“按鈕列”節(jié)點(diǎn)。 4. 選擇“編輯”、“更新”和“取消”并單擊“添加”() 按鈕將這些按鈕添加到“所選列”框。 5. 單擊“確定”。 DataGrid 控件重新顯示,同時(shí)在左側(cè)的列中顯示“編輯”鏈接按鈕 (LinkButton)。(最初,您看不到“更新”和“取消”按鈕。) 既已具有了“編輯”按鈕,您需要?jiǎng)?chuàng)建事件處理程序來(lái)設(shè)置行的編輯模式。若要控制編輯模式,請(qǐng)將 DataGrid 控件的 EditItemIndex 屬性設(shè)置為要編輯行的索引(從零開(kāi)始的)。例如,要將第三行設(shè)置為編輯模式,則將該屬性設(shè)置為 2。若要將某行返回顯示模式,

19、請(qǐng)將該屬性設(shè)置為 1。在更改了編輯模式之后,您必須重新綁定網(wǎng)格使其顯示該行中的數(shù)據(jù)。您可以通過(guò)傳遞到處理程序的事件對(duì)象確定用戶(hù)當(dāng)前所在的行。這些事件的事件對(duì)象包含一個(gè) Item 屬性,該屬性表示正在被更新的整個(gè) DataGrid 行。Item 對(duì)象又支持多個(gè)屬性,其中包含 Item.ItemIndex 屬性,該屬性返回您正在操作的行的索引值。設(shè)置編輯模式 1. (在 Visual Basic 中)右擊該頁(yè)并選擇“查看代碼”以在代碼編輯器中打開(kāi)該頁(yè)的類(lèi)文件。 或 (在 Visual C# 中)在“設(shè)計(jì)”視圖中,選擇網(wǎng)格并按 F4 鍵打開(kāi)“屬性”窗口。 2. (在 Visual Basic 中)在

20、代碼編輯器上方的左側(cè)下拉列表中選擇“DataGrid1”。 或 (在 Visual C# 中)單擊“屬性”窗口頂部的“事件”按鈕 ()。 3. (在 Visual Basic 中)在代碼編輯器頂部右側(cè)的下拉列表中選擇“EditCommand”。 或 (在 Visual C# 中)雙擊網(wǎng)格中的“EditCommand”。 創(chuàng)建了一個(gè) DataGrid1_EditCommand 處理程序。 4. 為 CancelCommand 事件重復(fù)第二步和第三步。 創(chuàng)建了一個(gè) DataGrid1_CancelCommand 處理程序。 5. 在 EditCommand 事件處理程序中添加下面的代碼: 6. &

21、#39; Visual Basic7. DataGrid1.EditItemIndex = e.Item.ItemIndex8. DataGrid1.DataBind()9.10. / C#11. DataGrid1.EditItemIndex = e.Item.ItemIndex;DataGrid1.DataBind();12. 在 CancelCommand 事件處理程序中添加下面的代碼: 13. ' Visual Basic14. DataGrid1.EditItemIndex = -115. DataGrid1.DataBind()16.17. / C#18. DataGrid

22、1.EditItemIndex = -1;DataGrid1.DataBind();測(cè)試目前具有的功能現(xiàn)在您具有一個(gè) DataGrid 控件,該控件顯示數(shù)據(jù)集(在從數(shù)據(jù)庫(kù)填充了數(shù)據(jù)集之后)中的數(shù)據(jù),并且還對(duì)網(wǎng)格進(jìn)行了配置,每行都有一個(gè)“編輯”按鈕。雖然頁(yè)尚未完成,但現(xiàn)在對(duì)其進(jìn)行測(cè)試以確保編輯功能可以正常工作是十分有用的。測(cè)試目前具有的功能 1. 在解決方案資源管理器中,右擊 Web 窗體頁(yè)并選擇“生成并瀏覽”。 當(dāng)前項(xiàng)目將被編譯,Web 窗體頁(yè)將顯示在設(shè)計(jì)器的瀏覽器窗格中。如果一切工作正常,則網(wǎng)格將填充有數(shù)據(jù),網(wǎng)格的第一列將包含標(biāo)有“Edit”的鏈接。 2. 單擊網(wǎng)格中任何行的“編輯”鏈接。

23、將重新顯示該行,并帶有以下更改: · “編輯”替換為“更新”和“取消”鏈接。 · 數(shù)據(jù)重新顯示在 TextBox 控件中。 3. 單擊“取消”。 該行重新顯示在其原始窗體中。 下一節(jié)詳細(xì)介紹如何讓“更新”鏈接將更改從網(wǎng)格寫(xiě)入數(shù)據(jù)集和數(shù)據(jù)庫(kù)。更新數(shù)據(jù)集和數(shù)據(jù)庫(kù)至此,DataGrid 控件已完成了僅顯示數(shù)據(jù)所涉及的大部分工作。但是,與其他 ASP.NET 服務(wù)器控件一樣,該網(wǎng)格不包括自動(dòng)更新機(jī)制(即接受用戶(hù)在網(wǎng)格中進(jìn)行的更改并將更改發(fā)送回?cái)?shù)據(jù)源)。若要執(zhí)行更新,您需要編寫(xiě)一些代碼。更新實(shí)際以?xún)蓚€(gè)階段發(fā)生。首先,您必須用在網(wǎng)格中進(jìn)行的更改更新數(shù)據(jù)集。然后,您必須將數(shù)據(jù)集中的更改寫(xiě)

24、回?cái)?shù)據(jù)庫(kù)。有關(guān)更多信息,請(qǐng)參閱數(shù)據(jù)集更新介紹。當(dāng)網(wǎng)格行處于編輯模式時(shí),最左邊的一列包含“更新”鏈接。當(dāng)用戶(hù)單擊該鏈接時(shí),它引發(fā)一個(gè) UpdateCommand 事件。您將在該事件的處理程序中編寫(xiě)所有更新代碼。創(chuàng)建 UpdateCommand 處理程序 1. (在 Visual Basic 中)如果尚未將其打開(kāi),則再次打開(kāi)代碼編輯器。 或 (在 Visual C# 中)在“設(shè)計(jì)”視圖中,選擇網(wǎng)格并按 F4 鍵打開(kāi)“屬性”窗口。 2. (在 Visual Basic 中)在代碼編輯器上方的左側(cè)下拉列表中選擇“DataGrid1”。 或 (在 Visual C# 中)單擊“屬性”窗口頂部的“事件”按

25、鈕 ()。 3. (在 Visual Basic 中)在代碼編輯器頂部右側(cè)的下拉列表中選擇“UpdateCommand”。 或 (在 Visual C# 中)雙擊網(wǎng)格中的“UpdateCommand”。 創(chuàng)建了一個(gè) DataGrid1_UpdateCommand 事件處理程序。 從 DataGrid 控件進(jìn)行更新的步驟您將執(zhí)行的操作的大綱如下: 1. 確定 DataGrid 控件中哪一行(根據(jù)索引)已被更新。然后,從該網(wǎng)格行獲取數(shù)據(jù)鍵,以便確定正在更新的行(根據(jù) ID)。 2. 從用戶(hù)更新的網(wǎng)格行獲取更改的值。 3. 使用數(shù)據(jù)鍵值在數(shù)據(jù)集表中查找對(duì)應(yīng)的行,然后將更改寫(xiě)入該行。此時(shí),您已更新了數(shù)

26、據(jù)集,但未更新數(shù)據(jù)庫(kù)本身。 4. 將更改從數(shù)據(jù)集發(fā)送到數(shù)據(jù)庫(kù)。這執(zhí)行將更改從數(shù)據(jù)集復(fù)制到數(shù)據(jù)庫(kù)的 SQL 命令或存儲(chǔ)過(guò)程。 5. 刷新 DataGrid 控件的內(nèi)容。 6. 下面一節(jié)解釋這些步驟中每一步的詳細(xì)情況。如果愿意,您可以跳過(guò)這些解釋?zhuān)苯舆M(jìn)入隨后的代碼。 從 DataGrid 控件進(jìn)行更新 1. 通過(guò)獲取傳入事件對(duì)象的行(Item 對(duì)象)的 ItemIndex 屬性確定哪個(gè) DataGrid 行已被更新。然后使用該索引值從網(wǎng)格的 DataKeys 集合中獲取對(duì)應(yīng)的值。 2. ' Visual Basic3. Dim key As String = DataGrid1.Data

27、Keys(e.Item.ItemIndex).ToString()4.5. / C#string key = DataGrid1.DataKeyse.Item.ItemIndex.ToString();6. 從 DataGrid 行中獲取更改的值。若要完成該操作,請(qǐng): a. 從傳入事件對(duì)象的項(xiàng)的 Cells 集合中獲取適當(dāng)?shù)膯卧瘢◤牧汩_(kāi)始的)。例如,網(wǎng)格中最左邊一列為 Cells(0)。 b. 對(duì)于每個(gè)單元格,獲取其 Controls 集合,它包含顯示在該單元格中的所有元素。 c. 從該集合中獲取第一個(gè)(并且只是第一個(gè))控件,在本例中為 TextBox 控件。若要獲取 TextBox,聲明一

28、個(gè)類(lèi)型 TextBox 的局部變量,并將 Controls 集合中的對(duì)象分配給它。 d. 獲取 TextBox 控件的值(其 Text 屬性)。 下面的示例顯示如何執(zhí)行這些步驟。 ' Visual BasicDim categoryName, categoryDescription As StringDim tb As TextBoxtb = CType(e.Item.Cells(2).Controls(0), TextBox)categoryName = tb.Texttb = CType(e.Item.Cells(3).Controls(0), TextBox)categoryDe

29、scription = tb.Text/ C#string categoryname;string categoryDescription;TextBox tb;tb = (TextBox) e.Item.Cells2.Controls0;categoryName = tb.Text;tb = (TextBox) e.Item.Cells3.Controls0;categoryDescription = tb.Text7. 在數(shù)據(jù)表中查找對(duì)應(yīng)的行。類(lèi)型化的 dsCategories 數(shù)據(jù)集包含一個(gè)特殊的 FindBy 方法(在本例中為 FindByCategoryID 方法),該方法通過(guò)行的主

30、鍵定位行并返回一個(gè)對(duì)它的引用。創(chuàng)建類(lèi)型化數(shù)據(jù)行的變量并調(diào)用該方法: 8. ' Visual Basic9. Dim r As dsCategories.CategoriesRow10. r = DsCategories1.Categories.FindByCategoryID(key)11.12. / C#13. dsCategories.CategoriesRow r;r = DsCategories1.Categories.FindByCategoryID(key);14. 通過(guò)更改您在第三步所在行中的值更新該行,如下面的示例所示: 15. ' Visual Basic16

31、. r.CategoryName = categoryName17. r.Description = categoryDescription18.19. / C#20. r.CategoryName = categoryName;r.Description = categoryDescription;21. 通過(guò)調(diào)用數(shù)據(jù)適配器的 Update 方法將更改從數(shù)據(jù)集發(fā)送到數(shù)據(jù)庫(kù): 22. ' Visual Basic23. SqlDataAdapter1.Update(DsCategories1)24.25. DataGrid1.DataBind()26.27. / C#28. SqlDa

32、taAdapter1.Update(DsCategories1);DataGrid1.DataBind();29. 將網(wǎng)格中的當(dāng)前行切換出編輯模式。 30. ' Visual Basic31. DataGrid1.EditItemIndex = -132.33. / C#DataGrid1.EditItemIndex = -1;34. 數(shù)據(jù)綁定 DataGrid 控件: 35. ' Visual Basic36. DataGrid1.DataBind()37.38. / C#DataGrid1.DataBind();下面的代碼顯示完成的 UpdateCommand 事件處理程序

33、是什么樣的。復(fù)制該代碼并將其粘貼到 Web 窗體頁(yè)的類(lèi)文件。提示 一定要改寫(xiě)先前創(chuàng)建的主干事件處理程序,否則將有兩個(gè)方法具有相同的名稱(chēng)和簽名。' Visual BasicPrivate Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand Dim categoryName, categoryDescription As String ' Ge

34、ts the value of the key field of the row being updated Dim key As String = DataGrid1.DataKeys(e.Item.ItemIndex).ToString ' Gets get the value of the controls (textboxes) that the user ' updated. The DataGrid columns are exposed as the Cells collection. ' Each cell has a collection of con

35、trols. In this case, there is only one ' control in each cell - a TextBox control. To get its value, ' you copy the TextBox to a local instance (which requires casting) ' and extract its Text property. ' ' The first column - Cells(0) - contains the Update and Cancel buttons. Dim

36、tb As TextBox ' Gets the value the TextBox control in the third column tb = CType(e.Item.Cells(2).Controls(0), TextBox) categoryName = tb.Text ' Gets the value the TextBox control in the fourth column tb = CType(e.Item.Cells(3).Controls(0), TextBox) categoryDescription = tb.Text ' Finds

37、the row in the dataset table that matches the ' one the user updated in the grid. This example uses a ' special Find method defined for the typed dataset, which ' returns a reference to the row. Dim r As dsCategories.CategoriesRow r = DsCategories1.Categories.FindByCategoryID(key) '

38、Updates the dataset table. r.CategoryName = categoryName r.Description = categoryDescription ' Calls a SQL statement to update the database from the dataset SqlDataAdapter1.Update(DsCategories1) ' Takes the DataGrid row out of editing mode DataGrid1.EditItemIndex = -1 ' Refreshes the gri

39、d DataGrid1.DataBind()End Sub/ C#private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) string categoryName, categoryDescription; / Gets the value of the key field of the row being updated string key = DataGrid1.DataKeyse.Item.ItemIndex.ToString();

40、/ Gets get the value of the controls (textboxes) that the user / updated. The DataGrid columns are exposed as the Cells collection. / Each cell has a collection of controls. In this case, there is only one / control in each cell - a TextBox control. To get its value, / you copy the TextBox to a loca

41、l instance (which requires casting) / and extract its Text property. / / The first column - Cells(0) - contains the Update and Cancel buttons. TextBox tb; / Gets the value the TextBox control in the third column tb = (TextBox)(e.Item.Cells2.Controls0); categoryName = tb.Text; / Gets the value the Te

42、xtBox control in the fourth column tb = (TextBox)(e.Item.Cells3.Controls0); categoryDescription = tb.Text; / Finds the row in the dataset table that matches the / one the user updated in the grid. This example uses a / special Find method defined for the typed dataset, which / returns a reference to

43、 the row. dsCategories.CategoriesRow r; r = dsCategories1.Categories.FindByCategoryID(int.Parse(key); / Updates the dataset table. r.CategoryName = categoryName; r.Description = categoryDescription; / Calls a SQL statement to update the database from the dataset sqlDataAdapter1.Update(dsCategories1)

44、; / Takes the DataGrid row out of editing mode DataGrid1.EditItemIndex = -1; / Refreshes the grid DataGrid1.DataBind();測(cè)試現(xiàn)在您已完成所有操作。若要闡釋網(wǎng)格如何工作并確保它正確更新數(shù)據(jù),您應(yīng)該對(duì)頁(yè)進(jìn)行測(cè)試。對(duì)頁(yè)進(jìn)行測(cè)試 1. 在解決方案資源管理器中,右擊 Web 窗體頁(yè)并選擇“生成并瀏覽”。 當(dāng)前項(xiàng)目將被編譯,Web 窗體頁(yè)將顯示在設(shè)計(jì)器的瀏覽器窗格中。 2. 單擊網(wǎng)格中任何一行的“編輯”鏈接,然后使用文本框編輯該行。 3. 單擊“更新”。 網(wǎng)格重新顯示,并帶有您的更改。如果

45、檢查數(shù)據(jù)庫(kù),您將看到已適當(dāng)寫(xiě)入更改。 下一步在本演練中,您使用 Web 窗體頁(yè)上的 DataGrid 控件不僅僅是查看數(shù)據(jù),而是要編輯數(shù)據(jù)。為了清楚起見(jiàn),本演練跳過(guò)了一些在成品應(yīng)用程序中要考慮的細(xì)節(jié)。您要對(duì)本演練中所學(xué)的內(nèi)容有所加強(qiáng)的一些方面包括:增強(qiáng) DataGrid 控件的功能本演練沒(méi)有利用 DataGrid 控件的某些更高級(jí)的功能。您可以增強(qiáng)的方面包括: · 通過(guò)選擇特定的要顯示的列、更改列標(biāo)題等配置網(wǎng)格中的個(gè)別列。有關(guān)詳細(xì)信息,請(qǐng)參閱向 DataGrid Web 服務(wù)器控件添加綁定列和指定 DataGrid Web 服務(wù)器控件中網(wǎng)格項(xiàng)的格式 · 允許用戶(hù)刪除行。有關(guān)詳細(xì)信息,請(qǐng)參閱允許用戶(hù)刪除 DataGrid Web 服務(wù)器控件中的項(xiàng)。除了指定“刪除”按鈕之外,您需要添加代碼以從數(shù)據(jù)集中移除記錄。有關(guān)詳細(xì)信息,請(qǐng)參閱刪除數(shù)據(jù)集中的記錄。 · 使用分頁(yè)。在本例中,您只顯示幾條記錄。但是,經(jīng)常要顯示更多的記錄,如果是這樣,允許網(wǎng)格以一次一頁(yè)的方式顯示信息是非常必要的。有關(guān)詳細(xì)信息,請(qǐng)參閱 DataGrid Web 服務(wù)器控件中的分頁(yè)行為。 緩存數(shù)據(jù)集在本演練中,頁(yè)每次到服務(wù)器的往返行程都會(huì)使數(shù)據(jù)集重新實(shí)例化并從數(shù)據(jù)庫(kù)重新填充數(shù)據(jù)集。這種策略雖然實(shí)現(xiàn)起來(lái)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論