今天在 MSDN論壇看見的,覺得又多學到一招了。
http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/168e0e40-5bf1-465a-9007-5a0bfea0b207
也分享給大家。
感謝網友 Shadow And Happy Code的答案
==============================================================================
逐步解說:對繫結至 GridView Web 伺服器控制項的資料列執行大量更新
http://msdn.microsoft.com/zh-tw/library/aa992036%28v=vs.100%29.aspx
==============================================================================
1. 首先,要把 GridView + SqlDataSource的精靈步驟完成。
2. 接著,把 GridView呈現資料的 <ItemTemplate>改成 TextBox(並且完成繫結、DataBinding),
讓用戶第一次看見畫面,就能修改每一個欄位。
3. 真正的「批次刪除」、「批次修改」的 Button按鈕,寫在 GridView外面。
Button的程式碼如下
完整的HTML設計畫面、後置程式碼,微軟的範例都提供了。
privatebool tableCopied = false;
private System.Data.DataTable originalDataTable;
protectedvoid GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
if (!tableCopied)
{
originalDataTable = ((System.Data.DataRowView)e.Row.DataItem).Row.Table.Copy();
ViewState["originalValuesDataTable"] = originalDataTable;
tableCopied = true;
}
}
protected void UpdateButton_Click(object sender, EventArgs e)
{
originalDataTable = (System.Data.DataTable)ViewState["originalValuesDataTable"];
foreach (GridViewRow r in GridView1.Rows)
if (IsRowModified(r)) { GridView1.UpdateRow(r.RowIndex, false); }
// 程式裡面,還有一個重點,
就是 GridView的 .UpdateRow()方法
http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.updaterow%28v=VS.100%29.aspx
我們要在這個方法加入的參數,有兩個,
分別是「要修改的那一列的索引(RowIndex)」與「是否進行驗證?(預設值為 false)」
// Rebind the Grid to repopulate the original values table.
tableCopied = false;
GridView1.DataBind();
}
protected bool IsRowModified(GridViewRow r)
{
int currentID;
string currentLastName;
string currentFirstName;
currentID = Convert.ToInt32(GridView1.DataKeys[r.RowIndex].Value);
currentLastName = ((TextBox)r.FindControl("LastNameTextBox")).Text;
currentFirstName = ((TextBox)r.FindControl("FirstNameTextBox")).Text;
System.Data.DataRow row = originalDataTable.Select(String.Format("EmployeeID = {0}", currentID))[0];
if (!currentLastName.Equals(row["LastName"].ToString())) { return true; }
if (!currentFirstName.Equals(row["FirstName"].ToString())) { return true; }
return false;
}
VB版範例在此:http://msdn.microsoft.com/zh-tw/library/aa992036%28v=vs.100%29.aspx#Y6840
相關文章:
GridView 的 RowDataBound事件,是一個很有趣的東西
也是我們伸手去 "改" GridView,必定會學到的
請看:http://www.dotblogs.com.tw/mis2000lab/Tags/RowDataBound/default.aspx
知識,因為分享而偉大
今日值班正妹,百度 新女神,劉冬 (圖片來源)
http://www.nownews.com/2012/01/10/91-2774567.htm
http://www.tw6m.com/2012/01/blog-post_1720.html
http://kntw.info/2012/01/blog-post_739.html

網頁上的補充範例(售後服務),不一定能立即提供 VB / C#語法(看時間夠不夠寫,請不要跟我們要)。
但書本上面的範例,一定有 VB / C#雙語法給您學習。 請看我們的「售後服務」範圍(嚴格認定)。
防範SQL Injection / XSS攻擊,請看:ASP.NET安全寫作 資料來源 -- TWISC@NTUST網路應用安全知識庫


............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......
南無普光佛 南無普明佛 南無普淨佛 南無多摩羅跋栴檀香佛 南無栴檀光佛 南無摩尼幢佛 南無歡喜藏摩尼寶積佛 南無一切世間樂見上大精進佛 南無摩尼幢燈光佛
南無慧炬照佛 南無海德光明佛 南無金剛牢強普散金光佛 南無大強精進勇猛佛 南無大悲光佛 南無慈力王佛 南無慈藏佛 南無栴檀窟莊嚴勝佛 南無賢善首佛
南無善意佛 南無廣莊嚴王佛 南無金華光佛 南無寶蓋照空自在力王佛 南無虛空寶華光佛 南無琉璃莊嚴王佛 南無普現色身光佛 南無不動智光佛 南無降伏眾魔王佛
南無才光明佛 南無智慧勝佛 南無彌勒仙光佛 南無善寂月音妙尊智王佛 南無世淨光佛 南無龍種上尊王佛 南無日月光佛 南無日月珠光佛 南無慧幢勝王佛
南無師子吼自在力王佛 南無妙音勝佛 南無常光幢佛 南無觀世燈佛 南無慧威燈王佛 南無法勝王佛 南無須彌光佛 南無須曼那華光佛 南無優曇鉢羅華殊勝王佛
南無大慧力王佛 南無阿閦毗歡喜光佛 南無無量音聲王佛 南無才光佛 南無金海光佛 南無山海慧自在通王佛 南無大通光佛 南無一切法常滿王佛 南無釋迦牟尼佛
南無金剛不壞佛 南無寶光佛 南無龍尊王佛 南無精進軍佛 南無精進喜佛 南無寶火佛 南無寶月光佛 南無現無愚佛 南無寶月佛 南無無垢佛 南無離垢佛
南無勇施佛 南無清淨佛 南無清淨施佛 南無娑留那佛 南無水天佛 南無堅德佛 南無栴檀功德佛 南無無量掬光佛 南無光德佛 南無無憂德佛
南無那羅延佛 南無功德華佛 南無蓮華光遊戲神通佛 南無財功德佛 南無德念佛 南無善名稱功德佛 南無紅燄帝幢王佛 南無善遊步功德佛 南無鬪戰勝佛
南無善遊步佛 南無周匝莊嚴功德佛 南無寶華遊步佛 南無寶蓮華善住娑羅樹王佛 南無法界藏身阿彌陀佛
............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......
無垢清淨光 慧日破諸闇 能伏災風火 普明照世間