Редактируемый GridView, который сохраняет изменения в состоянии просмотра до сохранения

Я знаю, как иметь редактируемый GridView вместе с SqlDataSource, в котором каждое редактирование (обновление / вставка / удаление) немедленно сохраняется в базе данных (с помощью команды UpdateCommand SqlDataSource, команды Insert и т. Д.).

Теперь мне нужно иметь редактируемый GridView, который поддерживает все изменения в состоянии просмотра, пока пользователь не нажмет кнопку «Сохранить» в другом месте формы.

Другими словами:

  1. При первой загрузке заполните GridView из данных БД.
  2. Пользователь вносит различные изменения в данные, которые еще не сохраняются в БД, но которые сохраняются после любого количества обратных передач.
  3. Пользователь нажимает Сохранить, и все изменения сохраняются в БД.

Я предполагаю, что мне нужно написать собственный код для сохранения данных на шаге 3, но есть ли простой и готовый к шагу 2 подход?


person Herb Caudill    schedule 23.04.2009    source источник
comment
1+ Мне нужно сделать то же самое, вы придумали решение?   -  person Tim Santeford    schedule 17.03.2010


Ответы (2)


Вы хотите использовать DataSet или DataTable и использовать следующее:

myDataSet.AcceptChanges();

Это фиксирует изменения, когда вы вызываете этот метод в DataSet, DataTable или DataRow. Думайте об этом почти как о SqlTransaction, где вам нужно выполнить фиксацию или откат. Надеюсь это поможет!

см. ссылку: Принять изменения

person mirezus    schedule 23.04.2009

Я могу предложить сделать следующее:
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) по готовности сохранить данные из объекта списка сеансов в БД.

person R_F    schedule 24.03.2011