版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、在ASP.NET 2.0中操作數(shù)據(jù)之十七:研究插入、更新和刪除的關(guān)聯(lián)事件作者:heker2007 字體:增加 減小 類型:轉(zhuǎn)載 時間:2016-05-07 我要評論本文主要講解ASP.NET 2.0中如何在點擊插入、更新、刪除等按鈕時關(guān)聯(lián)和觸發(fā)事件,以便我們在事件中寫代碼,實現(xiàn)我們期望的效果。導(dǎo)言當(dāng)使用GridView、DetailsView或FormView控件的內(nèi)建插入、編輯或刪除特征時,在用戶添加一條新記錄或更新/刪除一條現(xiàn)在記錄的過程中發(fā)生了多個步驟。正如我們之前一節(jié)里所討論的,在GridView中編輯一行時,保存(Update)和取消(Cancel)按鈕將取代編輯
2、(Edit)按鈕,并且綁定列轉(zhuǎn)換成TextBox。在用戶更新了數(shù)據(jù)并點擊保存按鈕之后,下述步驟在回傳時執(zhí)行:1.該GridView控件根據(jù)當(dāng)前編輯行的唯一標(biāo)識字段(通過DataKeyNames屬性)組裝它的ObjectDataSource的UpdateParameters參數(shù),連同用戶輸入的值2.該GridView控件調(diào)用它的ObjectDataSource的Update()方法,它轉(zhuǎn)而調(diào)用潛在對象的適當(dāng)?shù)姆椒ǎ≒roductsDAL.UpdateProduct,我們之前一節(jié)里)3.現(xiàn)在,這些隱含的數(shù)據(jù),包含保存后的更改,被重新綁定到GridView控件在這一連串的步驟里,觸發(fā)了許多事件,這讓
3、我們可以創(chuàng)建事件處理程序從而在需要的地方增加自定義邏輯。例如,在第1步之前,觸發(fā)GridView的事件。在這里,如果有什么validation錯誤我們可以取消更新請求。當(dāng)調(diào)用Update()方法時,觸發(fā)ObjectDataSource的Updating事件,提供了增加或自定義UpdateParameters的值的機(jī)會。在ObjectDataSource的潛在對象的方法完全執(zhí)行后,觸發(fā)ObjectDataSource的Updated事件。針對Updated事件的事件處理程序可以檢查更新操作的相關(guān)詳細(xì)信息,例如影響了多少行數(shù)據(jù),或者是否引發(fā)了一個異常。最后,在第2步之后,GridView的RowU
4、pdated事件觸發(fā);針對此事件的事件處理程序可以檢查關(guān)于剛剛完成的更新操作的相關(guān)額外信息。圖1描述了使用GridView更新時這一系列連續(xù)的事件和步驟。圖1里的這個事件模式不僅是在GridView的更新操作。從GridView、DetailsView或者FormView里插入、更新或者刪除數(shù)據(jù)時,數(shù)據(jù)Web服務(wù)器控件和ObjectDataSource都會發(fā)生這一連串的pre-level和post-level的事件。圖1: 當(dāng)在GridView里更新數(shù)據(jù)時,觸發(fā)一連串的Pre-和Post-事件在這一節(jié)里,我們將探討使用這些事件從而擴(kuò)展ASP.NET數(shù)據(jù)Web服務(wù)器控件的內(nèi)建插入、更新和刪除功能
5、。我們也會看看如何自定義編輯界面從而僅僅更新部分產(chǎn)品字段。第一步: 更新產(chǎn)品的ProductName和UnitPrice字段在之前一節(jié)的編輯界面里,包含了產(chǎn)品的所有字段并且它們都不是只讀的。如果我們從GridView中剔除一列(QuantityPerUnit),那么當(dāng)更新時數(shù)據(jù)Web服務(wù)器控件就不會設(shè)置ObjectDataSource的QuantityPerUnit UpdateParameters的值。ObjectDataSource則傳入一個null值到UpdateProduct這個業(yè)務(wù)邏輯層的方法,它將當(dāng)前編輯的數(shù)據(jù)庫記錄的QuantityPerUnit字段更改為值。同樣地,如果是一個必
6、需的字段,例如ProductName,如果從編輯界面中剔除了,那么此更新將會失敗并拋出一個“Column 'ProductName' does not allow nulls”異常。導(dǎo)致這一現(xiàn)象的原因是ObjectDataSource被配置為調(diào)用ProductsBLL類的UpdateProduct方法,它預(yù)期每一個產(chǎn)品字段都對應(yīng)一個輸入?yún)?shù)。因此,ObjectDataSource的UpdateParameters集合包含了該方法的每一個輸入?yún)?shù)。如果我們希望提供一個允許最終用戶僅僅可以更新部分字段的數(shù)據(jù)Web服務(wù)器控件,那么我們需要在ObjectDataSource的Updat
7、ing事件處理程序中編程設(shè)置缺失的UpdateParameters值,或者創(chuàng)建并調(diào)用一個預(yù)期部分字段的BLL方法。讓我們在接下來的步驟中探討。特別地,讓我們創(chuàng)建一個在一個可編輯的GridView中僅顯示ProductName和UnitPrice字段的頁面。這個GridView的編輯界面將僅僅允許用戶更新兩個顯示的字段,ProductName和UnitPrice 。因為這個編輯界面僅僅提供產(chǎn)品的部分字段,我們需要創(chuàng)建一個ObjectDataSource,它使用現(xiàn)有的BLL的UpdateProduct方法并在Updating事件處理程序中編程設(shè)置產(chǎn)品的缺少的字段的值,或者我們需要創(chuàng)建一個新的BLL
8、方法,它僅接受那些在GridView中已經(jīng)定義的部分字段。在這一節(jié)里,我們使用后者,創(chuàng)建一個UpdateProduct方法的重載,它提取3個輸入?yún)?shù):productName、unitPrice和productID:?123456789101112131415161718192021System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Update, false)public bool UpdateProduct(string productNa
9、me, decimal? unitPrice, int productID) Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID); if (products.Count = 0) / no matching record found, return false return false; Northwind.Produc
10、tsRow product = products0; product.ProductName = productName; if (unitPrice = null) product.SetUnitPriceNull(); else product.UnitPrice = unitPrice.Value; / Update the product record int rowsAffected = Adapter.Update(product);
11、160; / Return true if precisely one row was updated, otherwise false return rowsAffected = 1;跟原有的UpdateProduct方法類似,這個重載方法首先檢查是否在數(shù)據(jù)庫中存在一個指定ProductID的產(chǎn)品。如果不存在,它返回false,指示更新產(chǎn)品信息的請求失敗。否則,它因而更新現(xiàn)存的產(chǎn)品記錄的ProductName和UnitPrice字段并通過調(diào)用TableAdapter的Update()方法提交此更新,傳入ProductsRow實例。通過這些對我們的P
12、roductsBLL類的額外處理,我們現(xiàn)在可以創(chuàng)建一個簡單GridView界面。打開EditInsertDelete文件夾中的DataModificationEvents.aspx ,添加一個GridView控件到頁面。新建一個ObjectDataSource并配置它使用ProductsBLL類,它的Select()方法映射到GetProducts ,Update()方法映射到僅接受productName、unitPrice和productID輸入?yún)?shù)的UpdateProduct方法重載。圖2展示了映射ObjectDataSource的Update()方法到ProductsBLL類的新的Upd
13、ateProduct方法重載時的數(shù)據(jù)源配置向?qū)?。圖 2: 映射ObjectDataSource的Update()方法到新的UpdateProduct重載因為我們的例子將僅僅需要編輯數(shù)據(jù)的能力,不需要插入或刪除記錄,那么花些時間明確地指明該ObjectDataSource的Insert()和Delete()方法不會映射到ProductsBLL類的任何方法-通過到INSERT和DELETE的tab頁并從下拉列表中選擇(無)。圖 3: 在INSERT和DELETE的Tab頁,從下拉列表中選擇(無)完成了此向?qū)Ш?,從GridView的職能標(biāo)記里勾選上啟用編輯。完成了此數(shù)據(jù)源配置向?qū)Р⒔壎ǖ紾ridVi
14、ew后,Visual Staudio就已經(jīng)添加好它們的聲明語法。到源視圖察看該ObjectDataSource的聲明標(biāo)記,它將如下所示:?123456789101112131415161718192021System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Update, false)public bool UpdateProduct(string productName, decimal? unitPrice, int productID)&
15、#160; Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID); if (products.Count = 0) / no matching record found, return false return false; Northwind.ProductsRow product = products0; &
16、#160;product.ProductName = productName; if (unitPrice = null) product.SetUnitPriceNull(); else product.UnitPrice = unitPrice.Value; / Update the product record int rowsAffected = Adapter.Update(product); / Return true if precis
17、ely one row was updated, otherwise false return rowsAffected = 1;因為ObjectDataSource的Insert()和Delete()方法沒有映射,也就沒有InsertParameters或者DeleteParameters片段。此外,因為方法映射到UpdateProduct方法重載,它僅接受3個輸入?yún)?shù),UpdateParameters片段也就僅包含3個Parameter實例。注意到ObjectDataSource的屬性被設(shè)置為original_0。這個屬性是使用數(shù)據(jù)源配置向?qū)rVisual Studi
18、o自動設(shè)置的。因此,由于我們的BLL方法不需要傳入原始的ProductID值,從ObjectDataSource的聲明語法中刪除所有這些屬性設(shè)置。注意: If you如果你只是簡單地在設(shè)計視圖里從屬性窗口清除OldValuesParameterFormatString屬性的值,這個屬性會依舊存在于聲明語法里,但會被設(shè)置為一個空字符串。要么從聲明語法里把該屬性通通刪掉,要么從屬性窗口,設(shè)置它的值為默認(rèn)值:0 。雖然ObjectDataSource僅僅包含對productName、unitPrice和productID的UpdateParameters,Visual Studio還是為產(chǎn)品的每一個
19、字段添加一個綁定列或CheckBoxField。圖 4: 對應(yīng)產(chǎn)品的每一個字段,GridView都包含一個BoundField或CheckBoxField當(dāng)最終用戶編輯一個產(chǎn)品并點擊它的保存按鈕(Update),該GridView遍歷那些可編輯的字段,然后把用戶輸入的值賦值到ObjectDataSource的UpdateParameters集合里對應(yīng)的參數(shù)。如果沒有對應(yīng)的參數(shù),GridView則添加一個到參數(shù)集合里。因此,如果我們的GridView包含對應(yīng)產(chǎn)品的所有字段的綁定列或CheckBox列,那么ObjectDataSource則會調(diào)用能接受這些參數(shù)的方法重載,而不顧ObjectData
20、Source的聲明標(biāo)記指定只接受3個輸入?yún)?shù)的事實(見圖5)。類似地,如果存在某些由GridView非只讀列構(gòu)成的組合,而沒有一個UpdateProduct重載能接受相應(yīng)的參數(shù),則會在試圖保存時引發(fā)一個異常。圖 5: GridView將添加參數(shù)到ObjectDataSource的UpdateParameters集合為了確保ObjectDataSource調(diào)用僅接受productName、unitPrice和productID參數(shù)的UpdateProduct重載,我們需要限定GridView僅包含ProductName和UnitPrice這兩個可編輯的列。這可以通過刪除其他綁定列和CheckBo
21、x列,或者把這些列的ReadOnly屬性設(shè)置為true實現(xiàn),又或者上述兩種方法結(jié)合使用。在本節(jié)里讓我們簡單地刪除除了ProductName和UnitPrice綁定列以外的GridView的所有列,然后,GridView的聲明標(biāo)記將如下所示:?12345678910<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID=&quo
22、t;ObjectDataSource1"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="
23、ProductName" /> <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> </Columns></asp:GridView>即使重載預(yù)期3個輸入?yún)?shù),在我們的GridView里僅包含兩個綁定列。這是因為productID輸
24、入?yún)?shù)是一個主鍵(primary key)的值,它通過當(dāng)前編輯行的DataKeyNames屬性傳入值。我們的GridView控件,連同這個UpdateProduct重載,允許一個用戶僅僅編輯產(chǎn)品的名稱和單價而不會丟失產(chǎn)品的其他字段。圖 6: 僅允許編輯 ProductName和UnitPrice的界面完善UnitPrice格式化雖然圖6所示的GridView實例能夠正常工作,UnitPrice字段還完全未被格式化,導(dǎo)致顯示價格時缺少貨幣符號,還有4個小數(shù)位。為了在非編輯狀態(tài)的行應(yīng)用貨幣格式,只需要簡單地設(shè)置UnitPrice綁定列的DataFormatString屬性為0:c,還有它的Html
25、Encode屬性為false 。圖 7: 設(shè)置UnitPrice綁定列的DataFormatString和HtmlEncode屬性通過此項更改,處于非編輯狀態(tài)的行將價格格式化為貨幣;然而,當(dāng)前編輯的行,仍然顯示為沒有貨幣符號并保留四位小數(shù)。圖 8: 現(xiàn)在,非編輯狀態(tài)的行格式化為貨幣值通過設(shè)置此綁定列的ApplyFormatInEditMode屬性為true(默認(rèn)為false),可以把DataFormatString屬性里指定的格式化指令應(yīng)用到編輯界面。圖 9: 設(shè)置此綁定列的ApplyFormatInEditMode屬性為true通過這個更改,當(dāng)前編輯行里顯示的UnitPrice值也被格式化為
26、貨幣。圖 10: 現(xiàn)在,當(dāng)前編輯行的值也被格式化為貨幣然而,如果把產(chǎn)品價格更新為文本框里帶貨幣符號的值 例如$19.00 則會拋出一個FormatException異常。當(dāng)GridView嘗試把用戶提供的值賦值到ObjectDataSource的UpdateParameters集合,它無法把UnitPrice字符串“$19.00”轉(zhuǎn)換成參數(shù)要求的decimal類型(見圖11)。為了補救這個問題我們可以為GridView的RowUpdating事件添加一個事件處理程序并讓它把用戶輸入的UnitPrice格式化為貨幣格式的decimal 。這個GridView的RowUpdating事件接受的第二
27、個參數(shù)是一個GridViewUpdateEventArgs類型的對象,它包含一個NewValues字典,當(dāng)中的每一個屬性保存著用戶輸入的值,準(zhǔn)備賦值到ObjectDataSource的UpdateParameters集合。我們可以重寫現(xiàn)有的NewValues集合中的UnitPrice值為一個貨幣金額,通過下面的事件處理程序中的代碼進(jìn)行解析:?1234567protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) if (e.NewValues"UnitPrice"
28、!= null) e.NewValues"UnitPrice" = decimal.Parse(e.NewValues"UnitPrice".ToString(), System.Globalization.NumberStyles.Currency);如果用戶提供了一個諸如“$19.00”的UnitPrice值,這個值會被通過Decimal.Parse計算并解析為貨幣金額的值重寫。這將正確的解析貨幣值,無論是貨幣符號
29、、逗號、小數(shù)點、等等,并使用System.Globalization命名空間的NumberStyles枚舉。圖11展示因用戶輸入的UnitPrice值帶有貨幣符號引起的問題,還展示了如果利用GridView的RowUpdating事件處理程序從而正確地解析這樣的輸入。圖 11: 現(xiàn)在,當(dāng)前編輯行的UnitPrice值被格式化為貨幣金額第二步: 阻止NULL UnitPrices雖然數(shù)據(jù)庫被配置為允許Products表里的UnitPrice字段為NULL值,但我們可能希望防止用戶訪問這個特別的頁面并指定一個空的UnitPrice值。更確切地說,如果用戶在編輯一個產(chǎn)品行記錄時忘記輸入一個UnitP
30、rice值, 與其保存這個結(jié)果到數(shù)據(jù)庫,我們還不如給用戶顯示一個提示信息,自始至終這個頁面,任何的對產(chǎn)品的編輯必須指定一個價格。傳入到GridView的事件處理程序的GridViewUpdateEventArgs對象包含一個Cancel屬性,如果把它設(shè)置為true,則中止這個更新過程。讓我們擴(kuò)展RowUpdating事件處理程序,設(shè)置e.Cancel為true并顯示一個信息說明為什么在NewValues集合里的UnitPrice值為null 。首先,添加一個Label服務(wù)器控件到頁面并命名為MustProvideUnitPriceMessage 。這個Label控件將顯示用戶是否在更新一個產(chǎn)品
31、時忘記指定一個UnitPrice值。設(shè)置這個Label的Text屬性為“您必須為產(chǎn)品提供一個價格?!薄N乙惨呀?jīng)在Styles.css文件中添加了一個名為Warning的新CSS類別,定義如下:?1234567.Warning color: Red; font-style: italic; font-weight: bold; font-size: x-large;最后,設(shè)置Label的CssClass屬性為Warning 。這樣設(shè)計器中將在GridView上方顯示這個紅色、斜體、加粗、并且較大字體的警告信息
32、。圖 12: 一個Label控件已被添加到GridView上方默認(rèn)地,這個Label控件隱藏,那么在Page_Load事件處理程序中設(shè)置它的Visible屬性為false 。?1234protected void Page_Load(object sender, EventArgs e) MustProvideUnitPriceMessage.Visible = false;如果用戶嘗試更新一個產(chǎn)品并不指定UnitPrice值,我們希望取消這個更新并顯示警告標(biāo)簽。在GridView的RowUpdating事件處理程序中增加如下的代碼:?123456789101112131
33、4151617protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) if (e.NewValues"UnitPrice" != null) e.NewValues"UnitPrice" = decimal.Parse(e.NewValues"UnitPrice".ToStr
34、ing(), System.Globalization.NumberStyles.Currency); else / Show the Label MustProvideUnitPriceMessage.Visible = true; / Cancel the update
35、 e.Cancel = true; 如果一個用戶試圖保存一個產(chǎn)品并不指定價格,這個更新操作就被取消并顯示一個有用的提示信息。雖然數(shù)據(jù)庫(和業(yè)務(wù)邏輯)允許NULL值的UnitPrice,但這個特定的ASP.NET頁面不允許。圖 13: 用戶不能讓UnitPrice為空到目前為止我們看過了如何使用GridView的RowUpdating事件來編程改變賦值到ObjectDataSource的UpdateParameters集合的參數(shù)值,還有如何完全地取消這個更新過程。這些思想也可以延展至DetailsView和FormView控件并且應(yīng)用到插入
36、或刪除。這些任務(wù)也可以在ObjectDataSource這一層通過的Inserting、Updating和Deleting事件處理程序完成。這些事件在隱含對象的關(guān)聯(lián)方法被調(diào)用前觸發(fā),并且提供一個更改輸入?yún)?shù)集合或者完全取消此操作的最后機(jī)會。對應(yīng)這3個事件的事件處理程序傳入一個ObjectDataSourceMethodEventArgs 類型的對象,我們對它的這兩個屬性感興趣:·Cancel,它如果被設(shè)置為true,取消執(zhí)行中的操作·InputParameters,它是InsertParameters、UpdateParameters或DeleteParameters的集合
37、,這取決于這是Inserting、Updating、還是Deleting事件的事件處理程序為了舉例說明在ObjectDataSource這一層如何處理參數(shù)的值,讓我們在頁面里包含一個DeailsView,它允許用戶新增一個新的產(chǎn)品記錄。這個DetailsView將用作提供一個快捷的方式添加一個新的產(chǎn)品記錄到數(shù)據(jù)庫。為了在新增產(chǎn)品時保持界面一致,我們僅允許用戶輸入ProductName和UnitPrice字段。作為默認(rèn)值,這些在DetailsView的插入界面提供的值將被設(shè)置為一個數(shù)據(jù)庫的NULL值。不過,我們可以使用ObjectDataSource的Inserting事件注入不同的默認(rèn)值,正如
38、我們馬上要看的。第三步: 提供一個添加新產(chǎn)品的界面在GridView的上方,從工具箱里拖放一個DetailsView控件到設(shè)計器,清空它的Height和Width屬性,并將它綁定到頁面中已經(jīng)存在的ObjectDataSource 。這將為產(chǎn)品的每一個字段添加一個綁定列或CheckBox列。因為我們希望用這個DetailsView控件來添加新產(chǎn)品,我們需要從它的職能標(biāo)記里勾選啟用插入這一項;然而并沒有這一項,這是因為此ObjectDataSource的Insert()方法還沒有映射到ProductsBLL類的方法(回想起我們在配置數(shù)據(jù)源時設(shè)置了這個映射為(無) 見圖3)。為了再次配置這個Obje
39、ctDataSource,從它的職能標(biāo)記中選擇“配置數(shù)據(jù)源”的鏈接,載入向?qū)?。第一屏允許你更改ObjectDataSource綁定到的隱含對象;讓它依舊是ProductsBLL 。下一屏列出從ObjectDataSource到隱含對象的方法的映射。盡管我們已經(jīng)明確地指定Insert()和Delete()不映射到任何方法,然而如果你到INSERT和DELETE的tab頁你還是會看到那里有一個映射。這是因為ProductsBLL的AddProduct和DeleteProduct方法使用了DataObjectMethodAttribute指出它們分別是為Insert()和Delete()服務(wù)的默認(rèn)的
40、方法。因此,ObjectDataSource向?qū)г诿看芜\行時都會自動地選擇它們,除非那里被明確地指定了一個別的值。讓Insert()方法依舊指向AddProduct方法,不過再次從DELETE的tab頁的下拉列表中選擇“(無)”。圖 14: 從INSERT的Tab頁的下拉列表中選擇AddProduct方法圖 15: 從DELETE的Tab頁的下拉列表中選擇(無)完成了這些更改后,該ObjectDataSource的聲明語法中將包含一個InsertParameters集合,如下所示:?123456789101112131415161718192021<asp:ObjectDataSourc
41、e ID="ObjectDataSource1" runat="server" SelectMethod="GetProducts" TypeName="ProductsBLL" UpdateMethod="UpdateProduct" OnUpdating="ObjectDataSource1_Updating" InsertMethod="AddProduct" OldValuesPar
42、ameterFormatString="original_0"> <UpdateParameters> <asp:Parameter Name="productName" Type="String" /> <asp:Parameter Name="unitPrice" Type="Decimal" />
43、160;<asp:Parameter Name="productID" Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="productName" Type="String" /> <asp:Parameter Name=&qu
44、ot;supplierID" Type="Int32" /> <asp:Parameter Name="categoryID" Type="Int32" /> <asp:Parameter Name="quantityPerUnit" Type="String" /> <asp:Parameter Name=&qu
45、ot;unitPrice" Type="Decimal" /> <asp:Parameter Name="unitsInStock" Type="Int16" /> <asp:Parameter Name="unitsOnOrder" Type="Int16" /> <asp:Parameter Name=&quo
46、t;reorderLevel" Type="Int16" /> <asp:Parameter Name="discontinued" Type="Boolean" /> </InsertParameters></asp:ObjectDataSource>再次運行向?qū)?dǎo)致重新添加OldValuesParameterFormatString屬性。把這個屬性設(shè)置為默認(rèn)值(0)或者從聲明語法中把它們完全刪除。隨著Object
47、DataSource提供插入數(shù)據(jù)的能力,現(xiàn)在DetailsView的職能標(biāo)記里包含“啟用插入”的checkbox;回到設(shè)計器并勾選這一項。然后,減少DetailsView的列直道它只包含兩個綁定列- ProductName和UnitPrice ,還有一個CommandField。此時DetailsView的聲明語法將如下所示:?12345678910<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataK
48、eyNames="ProductID" DataSourceID="ObjectDataSource1"> <Fields> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> &
49、#160; <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> <asp:CommandField ShowInsertButton="True" /> </Fields></asp:DetailsView>
50、;圖16展現(xiàn)的是在此時通過瀏覽器查看的頁面。正如你所看到的,DetailsView列出第一個產(chǎn)品(Chai)的名稱和價格。不過,我們需要的是一個插入界面來提供一個用戶快速增加一個新產(chǎn)品到數(shù)據(jù)庫的手段。圖16: 該DetailsView當(dāng)前呈現(xiàn)在只讀模式為了展示插入模式的DetailsView我們需要設(shè)置DefaultMode屬性為Inserting。這讓DetailsView在第一次訪問和插入一條新紀(jì)錄之后,它都呈現(xiàn)在插入模式。如圖17所示,這樣的一個DetailsView提供了一個快捷的界面用以添加新記錄。圖 17: 這個DetailsView提供了一個快速添加新產(chǎn)品的界面當(dāng)用戶輸入一個產(chǎn)品
51、名稱和價格(例如“Acme Wate”和1.99,如圖17)并點擊插入按鈕,發(fā)生回傳并且開始插入的工作流程,直到最后添加一個新產(chǎn)品記錄到數(shù)據(jù)庫。DetailsView維持在它的插入界面,并且GridView自動地重現(xiàn)綁定到它的數(shù)據(jù)源,目的是為了包含新增加的產(chǎn)品,如圖18所示。圖 18: 產(chǎn)品“Acme Water”已經(jīng)被添加到數(shù)據(jù)庫雖然圖18的GridView中沒有顯示出來,DetailsView界面里缺少的產(chǎn)品字段 CategoryID、SupplierID、QuantityPerUnit、等等 被賦上一個數(shù)據(jù)庫NULL值。你可以通過履行下面一個步驟來看到這一點:1.到Visual Studio的服務(wù)器資源管理器2.展開NORTHWND.MDF數(shù)據(jù)庫節(jié)點3.在Products數(shù)據(jù)表節(jié)電上右鍵點擊4.選擇“顯示表數(shù)據(jù)”這將列出Products表中的所有記錄。如圖19所示,除了ProductID、ProductName和UnitPrice字段,我們的新產(chǎn)品的其它字段都為NULL值。圖 19: 未在DetailsView中提供的產(chǎn)品
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西華師范大學(xué)《商務(wù)文案設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 西安理工大學(xué)《跨文化商務(wù)交際導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年高鐵站區(qū)建筑勞務(wù)清包合同
- 2024版條碼設(shè)備維護(hù)保養(yǎng)協(xié)議版
- 2024房地產(chǎn)買賣合同(含裝修及配套設(shè)施)
- 二零二五年度跨境電商代理運輸服務(wù)協(xié)議
- 2024版禁牧管理員合同
- 2024版二人合作創(chuàng)業(yè)開店協(xié)議要覽版B版
- 二零二五年度能源行業(yè)核心技術(shù)人員保密及競業(yè)限制合同2篇
- 二零二五版國有企業(yè)法人借款合同合規(guī)審查要點3篇
- 電商公司售后服務(wù)管理制度
- 火災(zāi)應(yīng)急處理課件
- 創(chuàng)新者的逆襲3:新質(zhì)生產(chǎn)力的十八堂案例課-記錄
- 2024年河南省公務(wù)員考試《行測》真題及答案解析
- 2022-2024北京初三二模英語匯編:話題作文
- 人教版八年級英語上冊Unit1-10完形填空閱讀理解專項訓(xùn)練
- 2024年湖北省武漢市中考英語真題(含解析)
- GB/T 44561-2024石油天然氣工業(yè)常規(guī)陸上接收站液化天然氣裝卸臂的設(shè)計與測試
- 《城市綠地設(shè)計規(guī)范》2016-20210810154931
- 網(wǎng)球場經(jīng)營方案
- 2024年公司保密工作制度(四篇)
評論
0/150
提交評論