Asp.net編程,在GridView的CommandField的編輯按鈕中使用DropDownList選擇數據


我們在前一篇Form登錄驗證的代碼基礎上進行開發,GridView控件加在Main.aspx頁面,

即在Main.aspx頁面實現查詢、編輯、刪除,這里使用的數據庫為sql server

一、首先需要兩張數據表,表結構如下圖

商品信息表Food_Infor

商品類別表Food_Type

 

兩張表的ID都是自增的,Food_Infor表的主鍵為FoodCode,Food_Type表的主鍵為FoodType,

看圖可發現,Food_Infor表的FoodType字段值使用的是Food_Type表的主鍵值,存在外鍵關系。

測試數據如下圖

我們進行查詢並編輯、刪除的表即商品信息表Food_Infor

二、由於要進行數據庫的查詢、更新等操作,因此,我們在Form登錄驗證的代碼基礎上增加DBHelper數據庫操作類,類代碼如下

在Web.config配置文件在增加數據庫連接字符串,如下圖

三、到此,我們就可以在Main.aspx頁面進行表的查詢、編輯、刪除操作了,接下來我們在Main.aspx設計查詢頁面,如下圖

Main.aspx頁面的源碼如下

從頁面源碼可以看出,CommandField設置了顯示刪除按鈕和編輯按鈕。要使這兩個按鈕能夠使用起來,我們還需對GridView即GVFood增加4個事件,

我們在GVFood的屬性頁的事件欄中可以看見,如下圖,分別是:

取消按鈕事件RowCancelingEdit、刪除按鈕事件RowDeleting、編輯按鈕事件RowEditing、更新按鈕事件RowUpdating,分別雙擊增加

事件增加完畢,如下圖

在后台cs文件中,可以看見對應的事件都沒有任何代碼,如下圖,我們需要加上對應的代碼

四、對應事件的代碼

1、首先,我們需要操作數據,那必須顯示數據,因此,我們先要完成查詢按鈕,把數據顯示出來

在Main.aspx設計頁面,雙擊查詢按鈕,增加查詢事件,

我們在查詢事件中增加如下代碼

 

點擊運行,登錄進入Main.aspx后,單擊查詢按鈕即可查看數據,如下圖

2、我們還未加入編輯和刪除的代碼,此時點擊編輯和刪除會報錯,接下來我們加入對應事件的代碼

編輯按鈕事件RowEditing:

取消按鈕事件RowCancelingEdit

刪除按鈕事件RowDeleting

在做更新按鈕事件RowUpdating之前,我們來看看編輯、刪除按鈕的運行結果

刪除按鈕運行結果:009被刪除

編輯按鈕運行結果:

3、商品編號為主鍵,不可修改,因此,需要對GVFood進行修改,使商品編號列不能編輯,

因商品類別表是基礎表,能在修改商品信息表時修改類別編號,因此,類別編號列也不能在此修改,操作步驟如下

asp頁面源碼已改變

再次修改商品類別編號列為不可編輯即可

 

再次運行,主頁面的商品編號列和類別編號列已不可編輯

 

4,我們發現,在頁面修改商品名稱、商品價格、商品備注都不是問題,

唯一問題是,類別名稱來源與Food_Type表,如果不綁定成下拉列表DropDownList方式,修改很不方便,

因此,我們需要在類別名稱列綁定類別表的數據

第一步,修改GVFood的類別名稱列,把類別名稱列轉換為EditItemTemplate列,操作步驟如圖

查看頁面的源碼,類別名稱列已發生變化

第二步,在頁面源碼中,將類別名稱列做如下修改

第三步,修改GVFood屬性,切換到事件頁,雙擊RowDataBound增加 GVFood_RowDataBound事件

第四步,我們在新增的事件GVFood_RowDataBound中增加如下代碼

 

到此,我們運行就可用查看下拉列表綁定的效果

5、最后,我們就差更新事件GVFood_RowUpdating的代碼了,代碼如下

最終,更新按鈕的運行結果如下:

關鍵知識點總結:

1、使用CommandField實現GridView編輯和刪除操作

2、在Asp頁面源碼中,使用HiddenField隱藏控件和DropDownList下拉列表控件,HiddenField綁定value值,

<asp:TemplateField HeaderText="類別名稱">
<EditItemTemplate>
<asp:HiddenField ID="HDFFoodType" runat="server" Value='<%# Bind("FoodType") %>' />
<asp:DropDownList ID="DDLFoodName" runat="server" Width="90px" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("TypeName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

3、在 GVFood行綁定數據操作GVFood_RowDataBound中,顯示原始值,

//取隱藏控件的值,還原編輯前,該行的類別名稱,無此句,類別名稱會是已綁定的下拉列表的第一個值
ddltypename.SelectedValue =((HiddenField)e.Row.FindControl("HDFFoodType")).Value;

4、在更新方法GVFood_RowUpdating中,通過如下語句取值

//商品類別
string strFoodType = ((DropDownList)GVFood.Rows[e.RowIndex].FindControl("DDLFoodName")).SelectedValue;

文章較長,寫了近4個小時,如有不足之處,請指正,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM