2009-04-23 45 views
5

我知道如何有一個可編輯的GridView和SqlDataSource,其中每個編輯(更新/插入/刪除)立即持久化到數據庫(使用SqlDataSource的UpdateCommand,Insertcommand等)。可編輯的GridView存儲視圖狀態的變化,直到保存

我現在需要的是有一個可編輯的GridView維護所有編輯在視圖狀態中,直到用戶在表單上其他地方按下「保存」按鈕。

換句話說:

  1. 在第一負載,填充從DB數據在GridView
  2. 用戶進行各種編輯的數據,這是不持久化到數據庫還,但它通過任何數量的生存的回傳。
  3. 用戶按下保存,所有更改被保存到數據庫

我想我需要編寫自定義代碼來堅持在步驟3中的數據,但有一個簡單,失步驟2的方框?

+1

1+我需要做同樣的事情,你拿出一個解決方案嗎? – 2010-03-17 20:33:09

回答

2

你想使用DataSet或DataTable,並使用以下命令:

myDataSet.AcceptChanges(); 

當你調用的數據集,數據表或DataRow中該方法這提交更改。想想這幾乎就像是一個需要提交或回滾的SqlTransaction。希望這可以幫助!

見鏈接:Accept Changes

1

我可以建議做到以下幾點:
1)創建一個存儲數據的自定義列表對象。將數據庫數據上傳到該對象並將其保存到會話狀態。

對象:

public class InvestorClaim 
    { 
    public InvestorClaim() 
    { 
    } 

    private int? _record_id; 
    private int? _ic_record_id; 
    private Int64? _lh_record_id; 

    public int? record_id 
    { 
     get { return _record_id; } 
     set { _record_id = value; } 
    } 

    public int? ic_record_id 
    { 
     get { return _ic_record_id; } 
     set { _ic_record_id = value; } 
    } 

    public Int64? lh_record_id 
    { 
     get { return _lh_record_id; } 
     set { _lh_record_id = value; } 
    } 
} 

上傳數據到列表:

List<InvestorClaim> inv_claim = new List<InvestorClaim>(); 

inv_clai= dataFromDB 

保存到會話:

HttpContext.Current.Session[ "InvestorClaimsObject" ] = inv_claim; 

2)綁定gridview的對象,並根據需要處理數據。

protected void yourGridView_Bind() 
    { 
    inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>; 
    yourGridView.DataSource = inv_claim; 
    BindData(); 
    } 

    protected void yourGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    {  
    inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>; 

    //Update the values. 
    GridViewRow row = yourGridView.Rows[e.RowIndex]; 
    inv_claim[row.DataItemIndex].lh_record_id = ((TextBox)(row.Cells[1].Controls[0])).Text; 
    inv_claim[row.DataItemIndex].ic_record_id = ((TextBox)(row.Cells[2].Controls[0])).Text; 

    //Reset the edit index. 
    yourGridView.EditIndex = -1; 

    //Bind data to the GridView control. 
    yourGridView.DataSource = inv_claim; 
    BindData(); 
} 

3)準備好後,將數據從會話列表對象保存到數據庫。