老文新貼,FAQ — -GridView批次新增、批次修改,怎麼做?
源自MSDN的範例,超讚!
==============================
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()方法
我們要在這個方法加入的參數,有兩個,
分別是「要修改的那一列的索引(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;
}