校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 在ASP.NET 2.0中操作數據之六十三:GridView實現批量刪除數據

在ASP.NET 2.0中操作數據之六十三:GridView實現批量刪除數據

熱門標簽:臨沂智能電話機器人加盟 西寧呼叫中心外呼系統線路商 400電話辦理怎么樣 聯通官網400電話辦理 網絡電話外呼系統上海 蘇州如何辦理400電話 外呼電話機器人成本 地圖標注軟件免費下載 百應電話機器人外呼系統

導言:

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

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


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

第一步:創建批刪除界面

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


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

  然后,切換到BatchDelete.aspx頁面的Source模式,將代碼粘貼到asp:Content>標簽里.同理,將CheckBoxField.aspx.cs里面的后臺代碼拷貝到BatchDelete.aspx.cs里.(具體來說,就是將DeleteSelectedProducts按鈕的Click event事件、ToggleCheckState方法、CheckAll 和 UncheckAll按鈕的Click event事件)。完成拷貝后,BatchDelete.aspx頁面的后臺代碼類應該包含下面的代碼:

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

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


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

第二步:在事務里刪除選中的產品

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

DeleteSelectedProducts按鈕的Click事件目前使用的foreach循環如下:

// 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集獲取該產品的ProductID值,然后更新DeleteResults控件的Text屬性以顯示要刪除該行.

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

  為了保證使用原子操作,我們將轉為使用ProductsBLLclass類的DeleteProductsWithTransaction method方法.由于該方法接受一系列的ProductID值,
我們首先需要編譯這一系列的值,再將其作為參數傳遞出去.我們首先創建一個int類型的ListT>的實例,在foreach循環里我們需要將產品的ProductID值添加給ListT>,結束循環后,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();
 }
}

  上述代碼創建了一個int類型的ListT>(也就是productIDsToDelete),并用ProductID值對其進行填充,foreach循環結束后,如果至少選中了一個產品,將調用ProductsBLL 類的DeleteProductsWithTransaction method方法,并傳遞該List。名為DeleteResults的Label控件也將顯示出來;數據重新綁定到GridView(自然,剛刪除掉的記錄將不會顯示出來).

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


圖4:選中的產品將被刪除


圖5:被刪除產品的ProductID值出現的GridView下面的Label控件里

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

總結:

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

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

  祝編程快樂!

作者簡介

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

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

標簽:臨夏 中衛 平涼 甘肅 聊城 海西 清遠 慶陽

巨人網絡通訊聲明:本文標題《在ASP.NET 2.0中操作數據之六十三:GridView實現批量刪除數據》,本文關鍵詞  在,ASP.NET,2.0,中,操作,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數據之六十三:GridView實現批量刪除數據》相關的同類信息!
  • 本頁收集關于在ASP.NET 2.0中操作數據之六十三:GridView實現批量刪除數據的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色哦色哦哦色天天综合| 国产一区日韩二区欧美三区| 国产欧美日本一区二区三区| 欧美电影影音先锋| 7777精品伊人久久久大香线蕉经典版下载 | 91免费版在线看| 成人激情黄色小说| 粗大黑人巨茎大战欧美成人| 免费av网站大全久久| 日韩精品一级二级| 免费日韩伦理电影| 奇米色一区二区| 国产一区高清在线| 成人性生交大合| 色欧美片视频在线观看| 欧美日韩一区视频| 精品久久一区二区| 国产精品入口麻豆原神| 日韩一区日韩二区| 偷拍亚洲欧洲综合| 蜜桃视频在线观看一区| 国产.欧美.日韩| 99re在线精品| 欧美一三区三区四区免费在线看| 精品国产免费久久 | 国产亚洲欧美一级| 国产精品伦理在线| 亚洲综合色成人| 久久精品国产99国产精品| 国产毛片精品视频| 色综合婷婷久久| 337p亚洲精品色噜噜| 久久亚洲综合色一区二区三区| 国产精品丝袜91| 亚洲一区二区影院| 韩国v欧美v亚洲v日本v| 91色porny在线视频| 7777精品伊人久久久大香线蕉超级流畅 | 日韩电影在线观看网站| 国产成人一区二区精品非洲| 在线精品视频一区二区| 久久久精品人体av艺术| 亚洲一区在线观看网站| 成人综合婷婷国产精品久久蜜臀 | 欧美一区二区三区免费在线看| 久久久美女毛片| 五月婷婷欧美视频| 成人激情开心网| 日韩精品在线网站| 亚洲一区二区三区国产| 成人综合日日夜夜| 日韩视频一区二区在线观看| 亚洲天堂2014| 国产91对白在线观看九色| 91麻豆精品国产综合久久久久久 | 91麻豆精品国产| 亚洲欧美视频在线观看视频| 激情久久久久久久久久久久久久久久| 日本二三区不卡| 国产农村妇女毛片精品久久麻豆| 日韩精品一级二级| 欧美日韩精品三区| 一区二区三区国产精品| 97久久精品人人澡人人爽| 久久综合网色—综合色88| 免费成人美女在线观看.| 在线观看免费成人| 一区二区三区四区不卡在线 | 久久精品久久综合| 欧美伦理影视网| 亚洲伊人色欲综合网| 色综合中文字幕国产| 久久久久88色偷偷免费| 精品一区二区三区影院在线午夜| 欧美乱妇23p| 日本欧美一区二区在线观看| 欧美日韩在线不卡| 亚洲第一二三四区| 欧美老女人在线| 视频一区欧美日韩| 日韩亚洲欧美高清| 蜜桃av一区二区| 久久久久久久久久久99999| 韩国成人福利片在线播放| 久久久久亚洲蜜桃| 成人丝袜18视频在线观看| 国产精品色婷婷久久58| 色综合色综合色综合| 一区二区三区不卡在线观看 | 日本丶国产丶欧美色综合| 亚洲免费av网站| 欧美性生活大片视频| 婷婷久久综合九色综合伊人色| 制服丝袜亚洲网站| 久久99国产乱子伦精品免费| 日本一区二区免费在线观看视频 | 精品污污网站免费看| 亚洲va韩国va欧美va| 欧美一区二区三区在线电影| 久久精品国产秦先生| 久久―日本道色综合久久| 成人精品在线视频观看| 一片黄亚洲嫩模| 日韩一区二区三区电影| gogo大胆日本视频一区| 亚洲香蕉伊在人在线观| 精品国产三级a在线观看| 丁香另类激情小说| 日韩电影在线免费观看| 国产精品色在线观看| 欧美日韩一区不卡| 粉嫩aⅴ一区二区三区四区| 亚洲老司机在线| 精品卡一卡二卡三卡四在线| 在线欧美日韩国产| 激情综合色播五月| 亚洲欧美日韩小说| 日韩欧美激情在线| 一本大道久久a久久精二百| 老汉av免费一区二区三区 | 欧美一区二区在线视频| 岛国精品在线观看| 青青青爽久久午夜综合久久午夜| 中文字幕一区av| 精品久久久久久久久久久久久久久 | 在线观看成人免费视频| 捆绑变态av一区二区三区| 玉米视频成人免费看| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲三级理论片| 久久色中文字幕| 欧美二区在线观看| 91行情网站电视在线观看高清版| 国产乱人伦精品一区二区在线观看| 玉足女爽爽91| 自拍偷拍亚洲综合| 国产欧美日本一区二区三区| 日韩一区二区麻豆国产| 欧美精品久久天天躁| 91久久精品网| 99久久精品国产一区| 懂色av一区二区三区免费观看| 日本不卡中文字幕| 午夜精品久久久久久久99水蜜桃| 亚洲色图.com| 亚洲精品视频一区| 国产精品久久久久久久久免费樱桃 | 91美女视频网站| 91网址在线看| 91小宝寻花一区二区三区| 丁香婷婷综合激情五月色| 国产精品 日产精品 欧美精品| 麻豆精品视频在线观看免费| 免费成人在线视频观看| 蜜臀va亚洲va欧美va天堂| 另类的小说在线视频另类成人小视频在线| 亚洲一区国产视频| 亚洲成人在线网站| 天堂蜜桃91精品| 日韩中文字幕区一区有砖一区| 亚洲成人av资源| 午夜视频在线观看一区二区| 日韩国产在线一| 性做久久久久久久久| 热久久一区二区| 国产一区二区三区国产| 国产剧情一区在线| 不卡区在线中文字幕| av电影在线观看一区| 91啦中文在线观看| 精品视频123区在线观看| 欧美精品乱人伦久久久久久| 精品日韩一区二区三区免费视频| 久久久久久久久97黄色工厂| 国产精品麻豆久久久| 亚洲一区二区三区四区在线观看| 偷拍一区二区三区| 国内精品第一页| 97久久精品人人爽人人爽蜜臀| 欧美亚洲自拍偷拍| 精品国产伦一区二区三区观看方式 | 国产九色sp调教91| 99这里只有久久精品视频| 欧美三区在线视频| 亚洲精品在线观看网站| 亚洲三级久久久| 久久精品国产**网站演员| www.性欧美| 欧美午夜精品电影| www国产成人免费观看视频 深夜成人网| 久久久久久99精品| 亚洲国产精品久久久久秋霞影院| 久久国产尿小便嘘嘘尿| 99久久精品国产精品久久| 欧美日韩国产不卡| 国产欧美日韩麻豆91| 日韩—二三区免费观看av| 成人高清视频免费观看| 日韩午夜三级在线| 一区二区三区欧美激情|