我有一個ASP.Net gridview是正確綁定。編輯我編輯某些fields.then後,我需要編輯其他行以及。但當我試圖要編輯其他行,以前編輯過的行會得到重置n保留其較舊的值。Gridview不保留舊值在C#和ASP.Net
要求是這樣的,我有許多編輯行和點擊一個按鈕,我需要所有的編輯值推到數據庫
我有一個ASP.Net gridview是正確綁定。編輯我編輯某些fields.then後,我需要編輯其他行以及。但當我試圖要編輯其他行,以前編輯過的行會得到重置n保留其較舊的值。Gridview不保留舊值在C#和ASP.Net
要求是這樣的,我有許多編輯行和點擊一個按鈕,我需要所有的編輯值推到數據庫
你需要保持你的GridView的回發之間的數據源。
您可以通過將DataTable存儲在Cache,Session或任何持久性存儲中來實現此目的。
編輯一行後,保存對此DataTable的更改,然後重新綁定GridView(從此DataTable中)。
當用戶單擊「全部保存」時,可以將更改的DataTable行保存到數據庫中。
如果您需要跟蹤哪些行已更改,您可以維護已在緩存或會話中更改的PrimaryKeys列表。
這就是我最初的計劃是...可以請你提供一個代碼做這個...任何幫助將不勝感激 – user1172910 2013-03-05 05:55:12
哪個部分你有麻煩?會有很多代碼參與 – 2013-03-05 06:02:33
可以說我的gridview有n行數...我需要將這些行存儲在數據表中的代碼然後在rowediting上我需要更新這個數據表並將它綁定到gridview – user1172910 2013-03-05 06:05:27
您是否檢查!IsPostBack在綁定網格之前是否在Page_Load事件中?如果您沒有在Page_Load事件中綁定網格,請發佈代碼以綁定網格。
你好WhizKid ...你可以請通過我已發佈的代碼...謝謝無論如何回答... – user1172910 2013-03-06 06:30:35
你的代碼的問題是,你在頁面加載綁定網格..所以當頁面加載時,它可以綁定數據庫中的值。對於回發上的寫入綁定方法,並在會話或隱藏字段上維護您的值時,當您單擊保存按鈕更新數據庫與該會話或隱藏字段..
No Manoj ...我的綁定方法沒有在頁面加載的位置... BindGrid在DropInput的SelectedIndexChanged事件中被調用。然後上面的函數getGridInfo()在BindGrid中調用...我相信你' ll瞭解它...謝謝 – user1172910 2013-03-06 06:32:04
你是否選擇啓用自動回發屬性下拉 – 2013-03-06 07:25:20
ofcourse,下拉的autoPostback屬性必須是真實的,以執行任何你想要的索引更改.. – user1172910 2013-03-06 08:36:56
早晨布賴恩...這是代碼獲取在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;
}
現在這裏的值是用於更新其持有的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活動這個會話變量綁定的網格。 一旦你完成編輯的事情,只需點擊按鈕,將編輯的內容推到數據庫...
請檢查你的gridview綁定方法是調用頁面加載和!isPostBack裏面?
爲
Void page_load()
{
if(!IsPostBack)
{
//Call GridView Binding method
}
}
我的綁定方法是沒有在哪裏頁面加載... BindGrid在下拉的SelectedIndexChanged事件中調用 – user1172910 2013-03-06 06:28:34
必須調用您的綁定方法頁面加載事件!IsPostBack for My Post way.Please檢查我的答案。 – 2013-03-06 06:54:53
沒有ramesh ..我的要求是這樣的,網格不能彈出時,頁面加載..它應該加載時,我從下拉列表中選擇...謝謝總是 – user1172910 2013-03-06 08:35:40
保護無效grdRepayment_RowEditing(對象發件人,GridViewEditEventArgs E)
{
grdRepayment.EditIndex = e.NewEditIndex;
myDatatable = (DataTable)Session["TempTable"];
grdRepayment.DataSource = myDatatable;
grdRepayment.DataBind();
}
這是我們需要綁定在RowEditing電網和RowCancelingEdit
您是否已將代碼放置在Row_Updating前夕的許多行中更新數據庫NT? [鏈接](http://www.codeproject.com/Articles/29745/A-GridView-with-Multiple-Selection) - 這將幫助你讓它多選。然後只需獲取所有選定的行並從GridView中獲取值並寫入數據庫。如果你遇到問題,我可以幫你。 – BeginnerCoder 2013-03-05 06:09:14