日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

批量删除64

發(fā)布時(shí)間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 批量删除64 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

前一篇教程 探討了如何使用一個(gè)完全可編輯的 GridView 來(lái)創(chuàng)建批量編輯界面。在用戶通常一次編輯多條記錄的情況下,批量編輯界面需要更少的回傳以及鍵盤(pán)到鼠標(biāo)的上下文切換,從而提高了終端用戶的效率。同理,對(duì)于常見(jiàn)的用戶一次刪除多條記錄的頁(yè)面,該技術(shù)也很有用。

使用過(guò)在線電子郵件客戶端的人都對(duì)這種最常見(jiàn)的批量刪除界面很熟悉:網(wǎng)格里的每一行都有一個(gè)復(fù)選框,還有一個(gè)對(duì)應(yīng)的“Delete All Checked Items” 按鈕(見(jiàn)圖1 )。本教程內(nèi)容很少,因?yàn)槲覀円言谇懊娼坛讨型瓿闪怂欣щy的工作:創(chuàng)建基于web 的界面和作為一個(gè)原子操作刪除多條記錄的方法。在為 GridView控件添加一列 Checkbox 控件 教程中,我們創(chuàng)建了一個(gè)包含復(fù)選框列的GridView ,在事務(wù)中封裝數(shù)據(jù)庫(kù)修改 教程中,我們?cè)?BLL 中創(chuàng)建了一個(gè)方法,該方法使用事務(wù)來(lái)刪除List<T> 的 ProductID 值。在本教程中,我們將借鑒并整合前面的經(jīng)驗(yàn)來(lái)創(chuàng)建一個(gè)批量刪除示例。

圖1?: 每行都有一個(gè)復(fù)選框

步驟1 : 創(chuàng)建批量刪除界面

由于我們?cè)跒?GridView控件添加一列 Checkbox 控件 教程中已經(jīng)創(chuàng)建了批量刪除界面 , 我們可簡(jiǎn)單地將其復(fù)制到 BatchDelete.aspx , 而不用重新創(chuàng)建。首先,打開(kāi) BatchData 文件夾中的 BatchDelete.aspx 頁(yè)面,以及 EnhancedGridView 文件夾中的 CheckBoxField.aspx 頁(yè)面。從 CheckBoxField.aspx 頁(yè)面中,轉(zhuǎn)至 Source 視圖,并復(fù)制 <asp:Content> 標(biāo)簽之間的標(biāo)記,如圖 2 所示。

圖2?: 將 CheckBoxField.aspx 的聲明式標(biāo)記復(fù)制到剪貼板

然后 , 進(jìn)入BatchDelete.aspx 的 Source 視圖 , 將剪貼板中的內(nèi)容粘貼到 <asp:Content> 標(biāo)簽內(nèi)。同理,將 CheckBoxField.aspx.cs 中代碼文件類(lèi)的代碼復(fù)制到 BatchDelete.aspx.cs 的代碼文件類(lèi)中( DeleteSelectedProducts 按鈕的 Click event handler 、 ToggleCheckState 方法以及 CheckAll 和 UncheckAll 按鈕的 Click event handler )。復(fù)制完成后 ,BatchDelete.aspx 頁(yè)面的代碼文件類(lèi)應(yīng)包含下面的代碼 :

using?System;?
using?System.Data;?
using?System.Configuration;?
using?System.Collections;?
using?System.Web;?
using?System.Web.Security;?
using?System.Web.UI;?
using?System.Web.UI.WebControls;?
using?System.Web.UI.WebControls.WebParts;?
using?System.Web.UI.HtmlControls;?
?
public?partial?class?BatchData_BatchDelete?:?System.Web.UI.Page?
{?
????protected?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?
????????????CheckBox?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?
????????????????int?productID?=?Convert.ToInt32(Products.DataKeys[row.RowIndex].Value);?
?
????????????????//?"Delete"?the?row?
????????????????DeleteResults.Text?+=?string.Format?
????????????????????("This?would?have?deleted?ProductID?{0}<br?/>",?productID);?
?
????????????????//...?To?actually?delete?the?product,?use?...?
????????????????//ProductsBLL?productAPI?=?new?ProductsBLL();?
????????????????//productAPI.DeleteProduct(productID);?
????????????????//............................................?
????????????}?
????????}?
?
????????//?Show?the?Label?if?at?least?one?row?was?deleted...?
????????DeleteResults.Visible?=?atLeastOneRowDeleted;?
????}?
?
????private?void?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;?
????????}?
????}?
?
????protected?void?CheckAll_Click(object?sender,?EventArgs?e)?
????{?
????????ToggleCheckState(true);?
????}?
?
????protected?void?UncheckAll_Click(object?sender,?EventArgs?e)?
????{?
????????ToggleCheckState(false);?
????}?
}

復(fù)制完聲明式標(biāo)記和源代碼后 , 花幾分鐘通過(guò)瀏覽器測(cè)試一下 BatchDelete.aspx 。應(yīng)該看到一個(gè)列出了前 10 類(lèi)產(chǎn)品的 GridView ,每行列出產(chǎn)品的名稱(chēng)、類(lèi)別、價(jià)格和一個(gè)復(fù)選框。同時(shí)還應(yīng)該有三個(gè)按鈕: “Check All” 、 “Uncheck All” 和 “Delete Selected Products” 。單擊 “Check All” 按鈕會(huì)選中所有的復(fù)選框,而 “Uncheck All” 將取消選中所有的復(fù)選框。單擊 “Delete Selected Products” 將顯示一個(gè)消息,列出所選產(chǎn)品的 ProductID 值,但不會(huì)真的刪除該產(chǎn)品。

圖3?: 界面從 CheckBoxField.aspx 移到 BatchDeleting.aspx

步驟2 : 使用事務(wù)刪除選中的產(chǎn)品

成功將批量刪除界面復(fù)制到 BatchDeleting.aspx 后 , 剩下的事情是更新代碼 , 以便 “Delete Selected Products” 按鈕通過(guò)ProductsBLL 類(lèi)的DeleteProductsWithTransaction 方法來(lái)刪除選中的產(chǎn)品。這個(gè) 在事務(wù)中封裝數(shù)據(jù)庫(kù)修改 教程中增加的方法接受 List<T> 的 ProductID 值作為其輸入值,并在事務(wù)范圍內(nèi)刪除對(duì)應(yīng)的每個(gè) ProductID 。

DeleteSelectedProducts 按鈕的Click event handler 目前使用以下For Each 循環(huán)來(lái)疊代各個(gè) GridView 行 :

//?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)?
????{?
????????//?Delete?row!?(Well,?not?really...)?
????????atLeastOneRowDeleted?=?true;?
?
????????//?First,?get?the?ProductID?for?the?selected?row?
????????int?productID?=?Convert.ToInt32(Products.DataKeys[row.RowIndex].Value);?
?
????????//?"Delete"?the?row?
????????DeleteResults.Text?+=?string.Format?
????????????("This?would?have?deleted?ProductID?{0}<br?/>",?productID);?
?
????????//...?To?actually?delete?the?product,?use?...?
????????//ProductsBLL?productAPI?=?new?ProductsBLL();?
????????//productAPI.DeleteProduct(productID);?
????????//............................................?
????}?
}

對(duì)于每一行,以編程的方式引用ProductSelector CheckBox Web 控件。如果它被選中,從 DataKeys 集獲取該行的ProductID ,然后更新 DeleteResults Label 的 Text 屬性以包含指示選擇刪除該行的消息。

上面的代碼不會(huì)真的刪除任何記錄,因?yàn)槲覀冏⑨屃藢?duì)ProductsBLL 類(lèi)的 Delete 方法的調(diào)用。不過(guò)就算實(shí)際運(yùn)用了這些刪除邏輯,代碼雖然可以刪除產(chǎn)品,但它不是在原子操作內(nèi)進(jìn)行的。也就是說(shuō),如果序列中的前幾個(gè)刪除成功,后面的一個(gè)刪除失敗(可能是因違反外鍵約束所致),將拋出一個(gè)異常,但那些已被刪除的產(chǎn)品仍然會(huì)保持刪除。

為保證使用原子操作,我們需要使用ProductsBLL 類(lèi)的DeleteProductsWithTransaction 方法。由于該方法接受一系列的ProductID 值,我們首先要在網(wǎng)格中編譯該列表,然后將它作為參數(shù)進(jìn)行傳遞。首先創(chuàng)建一個(gè)int 類(lèi)型的 List<T> 實(shí)例。在 foreach 循環(huán)里,我們需要將所選產(chǎn)品的ProductID 值添加到該 List<T> 。循環(huán)結(jié)束后,必須將該 List<T> 傳遞給 ProductsBLL 類(lèi)的DeleteProductsWithTransaction 方法。使用下面的代碼更新DeleteSelectedProducts 按鈕的Click event handler :

protected?void?DeleteSelectedProducts_Click(object?sender,?EventArgs?e)?
{?
????//?Create?a?List?to?hold?the?ProductID?values?to?delete?
????System.Collections.Generic.List<int>?productIDsToDelete?=??
????????new?System.Collections.Generic.List<int>();?
?
????//?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)?
????????{?
????????????//?Save?the?ProductID?value?for?deletion?
????????????//?First,?get?the?ProductID?for?the?selected?row?
????????????int?productID?=?Convert.ToInt32(Products.DataKeys[row.RowIndex].Value);?
?
????????????//?Add?it?to?the?List...?
????????????productIDsToDelete.Add(productID);?
?
????????????//?Add?a?confirmation?message?
????????????DeleteResults.Text?+=?string.Format?
????????????????("ProductID?{0}?has?been?deleted<br?/>",?productID);?
????????}?
????}?
?
????//?Call?the?DeleteProductsWithTransaction?method?and?show?the?Label??
????//?if?at?least?one?row?was?deleted...?
????if?(productIDsToDelete.Count?>?0)?
????{?
????????ProductsBLL?productAPI?=?new?ProductsBLL();?
????????productAPI.DeleteProductsWithTransaction(productIDsToDelete);?
?
????????DeleteResults.Visible?=?true;?
?
????????//?Rebind?the?data?to?the?GridView?
????????Products.DataBind();?
????}?
}

更新的代碼創(chuàng)建一個(gè)int 類(lèi)型的 List<T> (productIDsToDelete) ,并在其內(nèi)填充要?jiǎng)h除的ProductID 值。foreach 循環(huán)結(jié)束后,如果至少選擇了一個(gè)產(chǎn)品,則調(diào)用ProductsBLL 類(lèi)的DeleteProductsWithTransaction 方法,并傳遞該列表。也會(huì)顯示DeleteResults Label ,數(shù)據(jù)重新綁定到GridView (這樣,剛刪除的記錄就不再出現(xiàn)在網(wǎng)格中)。

圖 4 顯示的是選擇刪除的幾行后的 GridView 。圖 5 顯示的是單擊 “Delete Selected Products” 按鈕后立即顯示的屏幕。注意,在圖 5 中,被刪除記錄的 ProductID 值顯示在 GridView 下面的 Label 中,這些記錄不再顯示在 GridView 中。

圖4?: 選中的產(chǎn)品將被刪除

圖5?: 在 GridView 的下面列出了被刪除產(chǎn)品的 ProductID

注意 :?為驗(yàn)證 DeleteProductsWithTransaction 方法的原子操作 , 可在Order Details 表中手動(dòng)添加某個(gè)產(chǎn)品的條目 , 然后嘗試 ( 與其它產(chǎn)品一起 ) 刪除該產(chǎn)品。在試圖刪除有相關(guān)訂單的產(chǎn)品時(shí),將會(huì)收到違反外鍵約束的信息,不過(guò)要留意其它所選產(chǎn)品的刪除是如何回退的。

小結(jié)

創(chuàng)建一個(gè)批量刪除界面 , 需要添加一個(gè)有復(fù)選框列的 GridView , 以及一個(gè) Web 按鈕控件 , 單擊該按鈕時(shí) , 將在一個(gè)原子操作中刪除所有選中的記錄。在本教程中,我們創(chuàng)建的這樣一個(gè)界面整合了前面兩篇教程( 為 GridView 控件添加一列 Checkbox 控件 和 在事務(wù)里封裝數(shù)據(jù)庫(kù)修改 )中所做的工作。在第一篇教程中,我們創(chuàng)建了一個(gè)有復(fù)選框列的 GridView ,在后面一篇教程中,我們?cè)?BLL 中實(shí)現(xiàn)了一個(gè)方法,該方法傳遞 List(Of T) 的 ProductID 值,并在事務(wù)范圍內(nèi)刪除它們。

在下一篇教程中,我們將創(chuàng)建一個(gè)執(zhí)行批量插入的界面。

快樂(lè)編程!

轉(zhuǎn)載于:https://www.cnblogs.com/uddgm/articles/5451635.html

總結(jié)

以上是生活随笔為你收集整理的批量删除64的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。