婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之六十三:GridView實現(xiàn)批量刪除數(shù)據(jù)

在ASP.NET 2.0中操作數(shù)據(jù)之六十三:GridView實現(xiàn)批量刪除數(shù)據(jù)

熱門標(biāo)簽:臨沂智能電話機器人加盟 西寧呼叫中心外呼系統(tǒng)線路商 400電話辦理怎么樣 聯(lián)通官網(wǎng)400電話辦理 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 蘇州如何辦理400電話 外呼電話機器人成本 地圖標(biāo)注軟件免費下載 百應(yīng)電話機器人外呼系統(tǒng)

導(dǎo)言:

  在前面的教程,我們用GridView創(chuàng)建了一個批編輯界面。在用戶需要一次性編輯多條記錄的情況下,批編輯界面很有用。同理,當(dāng)用戶需要同時刪除多條記錄時,該技術(shù)也很有用.

  如果你使用過郵件系統(tǒng)的話,你應(yīng)該對這種最常見的批刪除界面很熟悉:界面里每一行都包含一個checkbox,此外,還有一個“Delete All Checked Items”按鈕(如圖1).本教程比較短,因為我們在前面的教程已經(jīng)完成大體的框架,在前面的第50章《為GridView控件添加Checkbox》里我們創(chuàng)建了一個包含一個checkboxes列的GridView控件;而在61章《在事務(wù)里對數(shù)據(jù)庫修改進行封裝》里,我們在BLL業(yè)務(wù)邏輯層里創(chuàng)建了一個方法,該方法使用事務(wù)來刪除基于ProductID 的記錄.在本教程,我們將整合這些內(nèi)容來創(chuàng)建一個處理批刪除的示例.


圖1:每一行都包含一個Checkbox

第一步:創(chuàng)建批刪除界面

  由于我們在第52章已經(jīng)創(chuàng)建了一個批刪除界面,因此我們可以簡單的將其拷貝到BatchDelete.aspx頁面。首先,打開BatchData文件夾里的BatchDelete.aspx頁面,以及EnhancedGridView文件夾里的CheckBoxField.aspx頁面。在CheckBoxField.aspx頁面,切換到Source模式,將asp:Content>標(biāo)簽里的代碼進行復(fù)制.


圖2:復(fù)制CheckBoxField.aspx頁面里的聲明代碼

  然后,切換到BatchDelete.aspx頁面的Source模式,將代碼粘貼到asp:Content>標(biāo)簽里.同理,將CheckBoxField.aspx.cs里面的后臺代碼拷貝到BatchDelete.aspx.cs里.(具體來說,就是將DeleteSelectedProducts按鈕的Click event事件、ToggleCheckState方法、CheckAll 和 UncheckAll按鈕的Click event事件)。完成拷貝后,BatchDelete.aspx頁面的后臺代碼類應(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);
 }
}

  完成上述工作后,花幾分鐘在瀏覽器里測試該頁面.你應(yīng)該首先看到一個GridView控件列出了前10個產(chǎn)品,每行列出了產(chǎn)品的name, category,price以及一個checkbox. 同時應(yīng)該有3個按鈕“Check All”, “Uncheck All”和“Delete Selected Products”.點“Check All”按鈕將會選中所有的checkboxes;而“Uncheck All”按鈕將釋放所有的
checkboxes;點“Delete Selected Products”的話將顯示一個消息,列出選中的產(chǎn)品的ProductID值,不過并不會真的刪除產(chǎn)品.


圖3:CheckBoxField.aspx頁面的界面搬到了BatchDeleting.aspx頁面

第二步:在事務(wù)里刪除選中的產(chǎn)品

  完成界面后,剩下的事情是更新代碼,以便當(dāng)點擊“Delete Selected Products”按鈕時,使用ProductsBLL class類里的DeleteProductsWithTransaction方法來刪除選中的產(chǎn)品.該方法是我們在第61章《在事務(wù)里對數(shù)據(jù)庫修改進行封裝》里添加的,它接受一系列的ProductID值,然后在一個事務(wù)里將刪除對應(yīng)的ProductID的記錄.

DeleteSelectedProducts按鈕的Click事件目前使用的foreach循環(huán)如下:

// 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);
 //............................................
 }
}

  對每行而言,編程引用ProductSelector CheckBox控件,如果它被選中,從DataKeys collection集獲取該產(chǎn)品的ProductID值,然后更新DeleteResults控件的Text屬性以顯示要刪除該行.

  上面的代碼并不會真的刪除任何的記錄,因為在ProductsBLL class類里我們只是注釋出了如何使用Delete方法。 不過就算實際地運用了這些刪除邏輯,這些代碼雖然可以刪除產(chǎn)品但沒有運用原子操作.也就是說,如果按順序?qū)︻^幾個產(chǎn)品刪除成功,如果接下來的某個產(chǎn)品刪除失敗(比如可能是違背里外鍵約束),那么將拋出一個異常,但是前面的刪除操作并不會回滾.

  為了保證使用原子操作,我們將轉(zhuǎn)為使用ProductsBLLclass類的DeleteProductsWithTransaction method方法.由于該方法接受一系列的ProductID值,
我們首先需要編譯這一系列的值,再將其作為參數(shù)傳遞出去.我們首先創(chuàng)建一個int類型的ListT>的實例,在foreach循環(huán)里我們需要將產(chǎn)品的ProductID值添加給ListT>,結(jié)束循環(huán)后,ListT>將傳遞給ProductsBLL class類的DeleteProductsWithTransaction method方法,用下面的代碼對DeleteSelectedProducts按鈕的Click事件處理器進行更新:

protected void DeleteSelectedProducts_Click(object sender, EventArgs e)
{
 // Create a List to hold the ProductID values to delete
 System.Collections.Generic.Listint> productIDsToDelete =
 new System.Collections.Generic.Listint>();

 // 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 deletedbr />", 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)建了一個int類型的ListT>(也就是productIDsToDelete),并用ProductID值對其進行填充,foreach循環(huán)結(jié)束后,如果至少選中了一個產(chǎn)品,將調(diào)用ProductsBLL 類的DeleteProductsWithTransaction method方法,并傳遞該List。名為DeleteResults的Label控件也將顯示出來;數(shù)據(jù)重新綁定到GridView(自然,剛刪除掉的記錄將不會顯示出來).

圖4里,我們選擇幾個產(chǎn)品以刪除;圖5顯示的是點擊“Delete Selected Products”按鈕后的界面.注意,在Label控件里顯示的已經(jīng)刪除的產(chǎn)品的ProductID值,而這些產(chǎn)品已經(jīng)刪除掉了,并沒有出現(xiàn)在GridView控件里.


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


圖5:被刪除產(chǎn)品的ProductID值出現(xiàn)的GridView下面的Label控件里

  注意:為驗證DeleteProductsWithTransaction method方法的原子操作,你可以為某個產(chǎn)品在Order Details表里手動添加一個條目,然后嘗試刪除該產(chǎn)品(當(dāng)然與其它產(chǎn)品一起刪除).這將會違背外鍵約束,注意對其它產(chǎn)品的刪除操作是如何回滾的.

總結(jié):

  創(chuàng)建一個批刪除界面的話,我們需要創(chuàng)建一個包含checkboxes列的GridView控件,以及Button Web控件。當(dāng)點擊該按鈕時,我們將刪除多個產(chǎn)品當(dāng)作一個單一原子操作.在本文,我們創(chuàng)建的界面整合了以前的2個章節(jié)的內(nèi)容.

  在下一篇,我們考察如何創(chuàng)建一個批插入的界面

  祝編程快樂!

作者簡介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用 微軟Web技術(shù)。大家可以點擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對大家的學(xué)習(xí)ASP.NET有所幫助。

您可能感興趣的文章:
  • 在ASP.NET 2.0中操作數(shù)據(jù)之五十九:使用SQL緩存依賴項SqlCacheDependency
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十:創(chuàng)建一個自定義的Database-Driven Site Map Provider
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十一:在事務(wù)里對數(shù)據(jù)庫修改進行封裝
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十二:GridView批量更新數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十四:GridView批量添加數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十六:在TableAdapters中使用現(xiàn)有的存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十七:在TableAdapters中使用JOINs
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十九:處理Computed Columns列

標(biāo)簽:臨夏 中衛(wèi) 甘肅 聊城 海西 清遠(yuǎn) 慶陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之六十三:GridView實現(xiàn)批量刪除數(shù)據(jù)》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之六十三:GridView實現(xiàn)批量刪除數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之六十三:GridView實現(xiàn)批量刪除數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产日韩欧美精品一区| 91免费视频网址| 婷婷久久综合九色综合伊人色| 国产精品久久久久久久浪潮网站 | 国产亲近乱来精品视频| 日韩欧美高清dvd碟片| 日韩一二三区视频| 日韩女优电影在线观看| 欧美第一区第二区| 精品国产髙清在线看国产毛片| 欧美本精品男人aⅴ天堂| 欧美mv日韩mv| 国产精品天美传媒沈樵| 亚洲图片你懂的| 一级日本不卡的影视| 天天综合网 天天综合色| 日本在线播放一区二区三区| 久久疯狂做爰流白浆xx| 国产一区不卡视频| av一二三不卡影片| 在线精品视频一区二区| 欧美一级免费观看| 国产午夜一区二区三区| 中文字幕一区二区三区四区不卡| 亚洲精品国产视频| 视频一区视频二区中文| 国产精品99久| 欧美丝袜丝交足nylons| 欧美刺激脚交jootjob| 国产精品网站导航| 亚洲444eee在线观看| 国产精品一区专区| 欧洲精品一区二区| 久久久久99精品国产片| 伊人婷婷欧美激情| 国产精品69久久久久水密桃| 色综合网站在线| 精品99一区二区| 亚洲国产综合在线| 床上的激情91.| 欧美一区二区久久| 亚洲乱码国产乱码精品精可以看 | 成人免费在线视频| 六月丁香婷婷久久| 91麻豆精品在线观看| 精品福利一区二区三区免费视频| 中文字幕一区三区| 激情综合色播五月| 欧美色倩网站大全免费| 中文字幕亚洲电影| 国产精品一二三区| 91精品欧美一区二区三区综合在 | 国产成人亚洲精品青草天美| 欧美日韩精品免费| 一区二区三区四区不卡在线| 国产精品一区二区你懂的| 91精品国产综合久久久久久| 亚洲精品老司机| 国产成人一区二区精品非洲| 日韩欧美国产综合一区| 午夜精品一区二区三区免费视频| 91麻豆产精品久久久久久| 中文字幕成人网| 福利一区二区在线观看| 欧美精品一区二区三区一线天视频| 日韩精品一二区| 欧美日韩日日摸| 亚洲美女一区二区三区| 99久久精品国产一区| 国产精品久久久久婷婷| 成人美女在线观看| 国产女人aaa级久久久级 | 国产精品美女一区二区三区 | 国产福利视频一区二区三区| 精品少妇一区二区| 蜜桃一区二区三区四区| 日韩午夜在线观看视频| 老司机精品视频在线| 精品国产乱码久久久久久图片| 久久99久久久欧美国产| 久久久久国产成人精品亚洲午夜| 国产一区二区三区香蕉| 久久久综合视频| 国产aⅴ精品一区二区三区色成熟| 国产亚洲成年网址在线观看| 成人av电影免费在线播放| 亚洲日本va在线观看| 91最新地址在线播放| 亚洲综合无码一区二区| 欧美三级在线播放| 日产精品久久久久久久性色| 精品国产91洋老外米糕| 国产91丝袜在线观看| 亚洲欧美怡红院| 欧美日韩日日摸| 国产在线一区二区| 国产精品福利一区| 欧美美女激情18p| 精品一区二区三区在线视频| 国产欧美日韩视频一区二区 | 成人精品高清在线| 夜夜嗨av一区二区三区网页 | 91在线码无精品| 三级一区在线视频先锋| 久久一区二区三区四区| 一本高清dvd不卡在线观看| 天涯成人国产亚洲精品一区av| 久久亚洲免费视频| 在线亚洲高清视频| 国产乱子轮精品视频| 亚洲综合久久久久| 国产亚洲欧美中文| 欧美视频一区二区三区四区| 国产精品一级黄| 天堂在线一区二区| 中文字幕亚洲不卡| 精品剧情v国产在线观看在线| 99久久99久久精品免费看蜜桃| 日本欧美在线看| 一区二区三区产品免费精品久久75| 久久久美女毛片| 欧美久久久久免费| 97se亚洲国产综合在线| 国产一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲免费在线播放| 国产精品女同一区二区三区| 欧美电视剧免费观看| 欧美日韩精品免费| 91福利在线观看| zzijzzij亚洲日本少妇熟睡| 国产呦萝稀缺另类资源| 日韩精品一二区| 亚洲成人av资源| 亚洲啪啪综合av一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 日韩三级中文字幕| 91精品国产欧美一区二区成人| 色综合视频在线观看| 99综合影院在线| 成人精品国产免费网站| 成人中文字幕电影| 成人一二三区视频| 成人免费高清在线观看| 国产精品系列在线观看| 国产揄拍国内精品对白| 韩国女主播成人在线观看| 久久精品噜噜噜成人av农村| 日本不卡视频在线观看| 青青草原综合久久大伊人精品| 视频一区在线播放| 午夜成人免费电影| 免费欧美高清视频| 激情深爱一区二区| 国产一区二区三区免费观看| 国产精品自拍三区| 国产成人在线影院| 色综合av在线| 欧美性受xxxx| 欧美在线看片a免费观看| 欧美日韩一级二级三级| 欧美福利视频导航| 欧美不卡一区二区三区四区| 亚洲精品一区二区三区精华液 | 国产一区91精品张津瑜| 国产精品99久久久久久久vr| 成人一区二区三区中文字幕| 99久免费精品视频在线观看| 91久久国产最好的精华液| 欧美精品aⅴ在线视频| 日韩欧美一区二区不卡| 国产欧美日韩激情| 一区二区三区小说| 久久99精品久久久| 99精品久久久久久| 69堂成人精品免费视频| 精品国产一区二区三区久久影院 | 久久综合色8888| 欧美激情一区在线| 一区二区三区在线视频观看58| 无码av免费一区二区三区试看 | 欧美午夜片在线看| 久久久久久久电影| 亚洲一区欧美一区| 国产精品一区二区视频| 欧美日韩性生活| 国产午夜精品一区二区| 亚洲成人你懂的| 国产ts人妖一区二区| 欧美日韩在线播放| 欧美高清一级片在线观看| 天天影视色香欲综合网老头| 国产二区国产一区在线观看| 在线观看av一区二区| 国产三区在线成人av| 五月天亚洲精品| 99久久精品费精品国产一区二区| 精品美女被调教视频大全网站| 一区二区不卡在线播放| 丁香桃色午夜亚洲一区二区三区|