2013-03-05 73 views
4

我有一個ASP.Net gridview是正確綁定。編輯我編輯某些fields.then後,我需要編輯其他行以及。但當我試圖要編輯其他行,以前編輯過的行會得到重置n保留其較舊的值。Gridview不保留舊值在C#和ASP.Net

要求是這樣的,我有許多編輯行和點擊一個按鈕,我需要所有的編輯值推到數據庫

+0

您是否已將代碼放置在Row_Updating前夕的許多行中更新數據庫NT? [鏈接](http://www.codeproject.com/Articles/29745/A-GridView-with-Multiple-Selection) - 這將幫助你讓它多選。然後只需獲取所有選定的行並從GridView中獲取值並寫入數據庫。如果你遇到問題,我可以幫你。 – BeginnerCoder 2013-03-05 06:09:14

回答

2

你需要保持你的GridView的回發之間的數據源。

您可以通過將DataTable存儲在Cache,Session或任何持久性存儲中來實現此目的。

編輯一行後,保存對此DataTable的更改,然後重新綁定GridView(從此DataTable中)。

當用戶單擊「全部保存」時,可以將更改的DataTable行保存到數據庫中。

如果您需要跟蹤哪些行已更改,您可以維護已在緩存或會話中更改的PrimaryKeys列表。

+0

這就是我最初的計劃是...可以請你提供一個代碼做這個...任何幫助將不勝感激 – user1172910 2013-03-05 05:55:12

+0

哪個部分你有麻煩?會有很多代碼參與 – 2013-03-05 06:02:33

+0

可以說我的gridview有n行數...我需要將這些行存儲在數據表中的代碼然後在rowediting上我需要更新這個數據表並將它綁定到gridview – user1172910 2013-03-05 06:05:27

0

您是否檢查!IsPostBack在綁定網格之前是否在Page_Load事件中?如果您沒有在Page_Load事件中綁定網格,請發佈代碼以綁定網格。

+0

你好WhizKid ...你可以請通過我已發佈的代碼...謝謝無論如何回答... – user1172910 2013-03-06 06:30:35

0

你的代碼的問題是,你在頁面加載綁定網格..所以當頁面加載時,它可以綁定數據庫中的值。對於回發上的寫入綁定方法,並在會話或隱藏字段上維護您的值時,當您單擊保存按鈕更新數據庫與該會話或隱藏字段..

+0

No Manoj ...我的綁定方法沒有在頁面加載的位置... BindGrid在DropInput的SelectedIndexChanged事件中被調用。然後上面的函數getGridInfo()在BindGrid中調用...我相信你' ll瞭解它...謝謝 – user1172910 2013-03-06 06:32:04

+0

你是否選擇啓用自動回發屬性下拉 – 2013-03-06 07:25:20

+0

ofcourse,下拉的autoPostback屬性必須是真實的,以執行任何你想要的索引更改.. – user1172910 2013-03-06 08:36:56

0

早晨布賴恩...這是代碼獲取在GridView到DataTable

私人無效getGridInfo()

{

DataTable dt = new DataTable(); 
    DataRow dr; 
    dt.Columns.Add(new System.Data.DataColumn("Select", typeof(byte))); 
    dt.Columns.Add(new System.Data.DataColumn("Client", typeof(string))); 
    dt.Columns.Add(new System.Data.DataColumn("PrincipleAmt", typeof(double))); 



    foreach (GridViewRow row in grdRepayment.Rows) 
    { 
     CheckBox Select = (CheckBox)row.FindControl("ChkSelect"); 
     Label ClientName = (Label)row.FindControl("lblClientName"); 
     Label Principal = (Label)row.FindControl("lblPricipal"); 

     dr = dt.NewRow(); 
     dr[0] = Convert.ToByte(Select.Checked); 
     dr[1] = ClientName.Text; 
     dr[2] = Convert.ToDouble(Principal.Text); 

     dt.Rows.Add(dr); 
    } 
    Session["TempTable"] = dt; 
} 
0

現在這裏的值是用於更新其持有的DataTable該會話變量的代碼,這必須在RowUpdating完成事件的 網格視圖。

保護無效grdRepayment_RowUpdating(對象發件人,GridViewUpdateEventArgs E)

{

 DataTable myDatatable; 
     GridViewRow row = grdRepayment.Rows[e.RowIndex]; 
     grdRepayment.EditIndex = -1; 

     if (row != null) 
     { 
      myDatatable = (DataTable)Session["TempTable"]; 
      for (int i = 0; i < myDatatable.Rows.Count; i++) 
      { 
       if (e.RowIndex == i) 
       { 

        myDatatable.Rows[i][1] = Convert.ToString(Client); 
        myDatatable.Rows[i][2] = Convert.ToString(Principal); 

        Session["TempTable"] = myDatatable; 
        grdRepayment.EditIndex = -1; 
        grdRepayment.DataSource = myDatatable; 
        grdRepayment.DataBind(); 

       } 
      } 
     } 
     } 

,並確保你只從RowEditing和RowCancellingEdit活動這個會話變量綁定的網格。 一旦你完成編輯的事情,只需點擊按鈕,將編輯的內容推到數據庫...

0

請檢查你的gridview綁定方法是調用頁面加載和!isPostBack裏面?

Void page_load() 
{ 
if(!IsPostBack) 

{ 
//Call GridView Binding method 
} 

} 
+0

我的綁定方法是沒有在哪裏頁面加載... BindGrid在下拉的SelectedIndexChanged事件中調用 – user1172910 2013-03-06 06:28:34

+0

必須調用您的綁定方法頁面加載事件!IsPostBack for My Post way.Please檢查我的答案。 – 2013-03-06 06:54:53

+0

沒有ramesh ..我的要求是這樣的,網格不能彈出時,頁面加載..它應該加載時,我從下拉列表中選擇...謝謝總是 – user1172910 2013-03-06 08:35:40

0

保護無效grdRepayment_RowEditing(對象發件人,GridViewEditEventArgs E)

{

grdRepayment.EditIndex = e.NewEditIndex; 
    myDatatable = (DataTable)Session["TempTable"]; 
    grdRepayment.DataSource = myDatatable; 
    grdRepayment.DataBind(); 

} 

這是我們需要綁定在RowEditing電網和RowCancelingEdit