




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、在ASP.NET 2.0中操作數(shù)據(jù)之五十:為GridView控件添加Checkbox作者:heker2007 字體:增加 減小 類型:轉(zhuǎn)載 時間:2016-05-16 我要評論本文主要介紹ASP.NET 2.0中為GridView控件添加Checkbox復(fù)選框控件的方法,并實現(xiàn)全選功能。導(dǎo)言:在前面的教程里我們探討了如何為GridView控件添加radio buttons列。當(dāng)用戶最多只能選擇一項數(shù)據(jù)時,我們可以在用戶界面里添加radio buttons列,而有時候,我們需要選擇任意多項數(shù)據(jù)。比如,基于Web的郵箱客戶端列出了一系列的郵件,及一列checkboxes,用戶可
2、選擇任意封郵件并執(zhí)行相同的操作,比如移動到另一個文件夾或?qū)⒅畡h除。在本教程,我們將探討如何添加checkboxes列,以及發(fā)生頁面回傳后如何確定到底選擇了哪些checkboxes。特別的,我們將練習(xí)一個類似于基于web的郵箱客戶端用戶界面。實例將包含一個啟用了分頁功能的GridView,用于列出表Products中的產(chǎn)品,每行記錄包含一個checkbox(見圖1)。當(dāng)點擊“Delete Selected Products”按鈕時,刪除選中的產(chǎn)品。圖1:每個Product Row包含一個Checkbox第1步:添加一個啟用分頁的GridView控件展示產(chǎn)品信息在考慮添加checkboxes列前,
3、我們先創(chuàng)建一個展示產(chǎn)品的GridView控件并啟用分頁。在文件夾EnhancedGridView里打開CheckBoxField.aspx頁面并進(jìn)入設(shè)計模式,從工具箱拖一個GridView到頁面,設(shè)其ID為Products。下一步,將其綁定到一個名為ProductsDataSource的ObjectDataSource控件。該ObjectDataSource控件使用ProductsBLL類,調(diào)用GetProducts()方法返回數(shù)據(jù)。因為本例的GridView控件是只讀的,在UPDATE, INSERT和DELETE選項卡的下拉列表里選“(None)”。圖2:創(chuàng)建一個名為ProductsDat
4、aSource的ObjectDataSource控件圖3:設(shè)置該ObjectDataSource控件調(diào)用GetProducts()方法獲取數(shù)據(jù)圖4:在UPDATE, INSERT和DELETE選項卡的下拉列表里選“(None)”。完成設(shè)置后,Visual Studio會自動為相關(guān)數(shù)據(jù)域(data fields)創(chuàng)建BoundColumns及一個CheckBoxColumn。就像我們在前面的教程做的那樣,將除了 ProductName, CategoryName和UnitPrice外的其它BoundFields刪除,并將相關(guān)HeaderText屬性設(shè)置為“Product”, “Category”
5、和“Price”。將UnitPrice BoundField格式化為貨幣形式。在智能標(biāo)簽里選擇“Enable Paging”啟用GridView的分頁功能。為了在用戶界面里可以刪除選中的產(chǎn)品,在GridView下面添加一個Button Web控件,設(shè)其ID為DeleteSelectedProducts,Text屬性為“Delete Selected Products”。在本例中我們不會直接從數(shù)據(jù)庫刪除數(shù)據(jù),而是顯示一條消息,說明要刪除的是什么產(chǎn)品。因此,在按鈕下面添加一個Label Web控件,設(shè)其ID為DeleteResults,清空其Text屬性, 將Visible和EnableViewS
6、tate屬性都設(shè)為false。做完上述修改后,GridView, ObjectDataSource, Button和Label的聲明代碼應(yīng)和下面的差不多:?12345678910111213141516171819202122232425262728<p> <asp:GridView ID="Products" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSource
7、ID="ProductsDataSource" AllowPaging="True" EnableViewState="False"> <Columns> <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName"
8、; /> <asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" /> <asp:BoundField DataField="UnitPrice" DataFormatString="0:c
9、" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice" /> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ProductsDataSource" runat="server&qu
10、ot; OldValuesParameterFormatString="original_0" SelectMethod="GetProducts" TypeName="ProductsBLL"> </asp:ObjectDataSource></p><p> <asp:Button ID="DeleteSelectedProducts" runat="server&qu
11、ot; Text="Delete Selected Products" /></p><p> <asp:Label ID="DeleteResults" runat="server" EnableViewState="False" Visible="False"></asp:Label></p>花幾分鐘在瀏覽器里觀看頁面(見圖5),你可以看到前10個產(chǎn)品的name, catego
12、ry以及price。圖5:顯示前10個產(chǎn)品的name, category以及price 第2步:添加一個Checkboxes列由于ASP.NET 2.0 包含一個CheckBoxField,我們也許自然會想到用它來為GridView控件添加一個Checkboxes列。然而,并不是那樣回事。因為CheckBoxField是專門設(shè)計來與布爾數(shù)據(jù)域(Boolean data field)打交道。也就是說,當(dāng)數(shù)據(jù)域的值可以用來判斷是否選中了checkbox時,CheckBoxField才派地上用場。CheckBoxField不能正確的包含一列未選中的checkboxes。作為替換,我們必須添
13、加一個模板,并在其ItemTemplate模式里添加一個CheckBox Web控件。我們要在GridView控件Products里添加一個模板,并放在最左邊。在GridView的智能標(biāo)簽里點“編輯模板”,在ItemTemplate模式里添加一個CheckBox Web控件,設(shè)其ID為ProductSelector。圖6:在模板的ItemTemplate模式里添加一個名為ProductSelector的CheckBox Web控件添加模板和CheckBox Web控件后,每一行記錄將包含一個CheckBox按鈕,如圖7所示:圖7:每個產(chǎn)品行包含一個CheckBox按鈕第3步:頁面回傳后確定點擊
14、了哪些Checkboxes按鈕現(xiàn)在我們已經(jīng)創(chuàng)建了一個checkboxes列,但在頁面發(fā)生回傳后還不能確定點擊了哪些Checkboxes按鈕,但當(dāng)點擊“Delete Selected Products”按鈕時,我們需要確定要刪除的是哪些產(chǎn)品,也即點擊了哪些Checkboxes按鈕。我們可以運用GridView的Rows屬性訪問其數(shù)據(jù)行(data rows),編程訪問該記錄行的CheckBox控件,根據(jù)其Checked屬性來判斷是否選中了該按鈕。為名為DeleteSelectedProducts的Button Web控件的Click事件創(chuàng)建一個事件處理器,添加如下代碼:?1234567891011
15、12131415161718192021222324252627protected void DeleteSelectedProducts_Click(object sender, EventArgs e) bool atLeastOneRowDeleted = false; / Iterate through the Products.Rows property foreach (GridViewRow row in Products.Rows) / Access the CheckBox Ch
16、eckBox cb = (CheckBox)row.FindControl("ProductSelector"); if (cb != null && cb.Checked) / Delete row! (Well, not really.) atLeastOneRowDeleted = true; / First, get the ProductID for the selected row
17、0; int productID = Convert.ToInt32(Products.DataKeysrow.RowIndex.Value); / "Delete" the row DeleteResults.Text += string.Format( "This would have deleted ProductID 0<br />", pro
18、ductID); / Show the Label if at least one row was deleted. DeleteResults.Visible = atLeastOneRowDeleted;GridView控件的Rows屬性返回構(gòu)成GridView數(shù)據(jù)行的GridViewRow實例集合。而foreach()循環(huán)將遍歷集合中的每一個實例。在一個GridViewRow對象中,我們通過使用row.FindControl("controlID")的形式來訪問該行記錄的CheckBox按鈕。如果選擇
19、了該按鈕,從DataKeys集合里獲取與該行記錄相對應(yīng)的ProductID值。在本例,我們僅僅是在Label控件DeleteResults里顯示相關(guān)提示信息,而在實際的應(yīng)用程序中,我們應(yīng)該調(diào)用ProductsBLL類的DeleteProduct(productID)方法。添加完上述事件處理器后,點擊“Delete Selected Products”按鈕,將會顯示那些被選中的產(chǎn)品的ProductID值。圖8:當(dāng)點擊“Delete Selected Products”時,將列出所選產(chǎn)品的ProductID值第4步:添加“Check All”和“Uncheck All”按鈕如果用戶想刪除當(dāng)前頁面上
20、的所有產(chǎn)品,則必須點擊每行的checkbox按鈕,稍顯麻煩。我們可以添加一個“Check All”按鈕,當(dāng)點擊該按鈕時可以選中頁面上的所有checkbox按鈕。反之,添加一個“Uncheck All”按鈕。在頁面上添加2個Button Web控件,放在GridView的上面。設(shè)第一個的ID為CheckAll,Text屬性為“Check All”; 設(shè)第二個的ID為UncheckAll,Text屬性為“Uncheck All”,如下:?123<asp:Button ID="CheckAll" runat="server" Text="Che
21、ck All" /> <asp:Button ID="UncheckAll" runat="server" Text="Uncheck All" />接著,在后臺代碼類(code-behind class)里創(chuàng)建一個名為ToggleCheckState(checkState)的方法。調(diào)用該方法時,其遍歷GridView控件Products的Rows集合,根據(jù)傳入的參數(shù)checkState對每個CheckBox的Checked屬性賦值。?1234567891011private void
22、 ToggleCheckState(bool checkState) / Iterate through the Products.Rows property foreach (GridViewRow row in Products.Rows) / Access the CheckBox CheckBox cb = (CheckBox)row.FindControl("ProductSelector"); if (cb != null) cb.Checked = checkState; 然后,為button控件CheckAll和UncheckAll創(chuàng)建Click事件處理器,在CheckAll的Click事件處理器中,僅僅簡單的調(diào)用Toggl
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同文書模板:華通物流有限公司貨運代理業(yè)務(wù)合作協(xié)議
- 2025某物流公司駕駛員工作服采購合同書
- 網(wǎng)絡(luò)項目設(shè)計合同
- 農(nóng)村個人贈與土地使用權(quán)協(xié)議
- 2025農(nóng)民房屋租賃合同書范本
- 租用電路合同范本
- 個人與個人借款合同范本
- 2025設(shè)備租賃合同(生產(chǎn)線設(shè)備租賃用)
- 打架承諾協(xié)議書范本
- 采購教育服務(wù)協(xié)議書
- 股份制合作協(xié)議及企業(yè)章程草案
- 硬件工程師招聘筆試題及解答
- 脫硫塔內(nèi)部結(jié)構(gòu)優(yōu)化設(shè)計-洞察分析
- 加油站安全生產(chǎn)風(fēng)險分級管控和隱患排查治理雙體系方案全套資料匯編
- SaaS軟件許可及使用服務(wù)協(xié)議
- GB/T 9755-2024合成樹脂乳液墻面涂料
- 語音廳合同范例
- 第六章 質(zhì)量和密度 綜合素質(zhì)評價卷(含答案)2024-2025學(xué)年北師大八年級物理下冊
- 中華民族共同體概論教案第二講-樹立正確的中華民族歷史觀
- 國家開放大學(xué)《幼兒園社會教育專題》形考作業(yè)1-4參考答案
- 人工智能訓(xùn)練師(初級-五級)職業(yè)技能鑒定理論考試題庫-下(判斷題)
評論
0/150
提交評論