2020-05-03|閱讀時間 ‧ 約 6 分鐘

GridView批次新增、批次修改,怎麼做?

    老文新貼,FAQ — -GridView批次新增、批次修改,怎麼做?
    源自MSDN的範例,超讚!
    逐步解說:對繫結至 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()方法
    我們要在這個方法加入的參數,有兩個,
    分別是「要修改的那一列的索引(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;
    }
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.