2015-09-25 45 views
0

我想設置GridView1_RowEditing到的GridView的ID而不是索引,因爲它會導致問題,當最終用戶搜索的值和編輯一行。我已經改變了我的代碼從這個:無法加載在GridView1_RowEditing的視圖狀態

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
GridView1.EditIndex = e.NewEditIndex; 
BindGridView(); 
} 

這樣:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
Label ID = (Label)GridView1.Rows[e.NewEditIndex].FindControl("ID"); 
    BindGridView(); 
} 

的ID是在數據庫列的名稱。

但是當我點擊編輯按鈕,第二次我得到這個錯誤:

無法加載視圖狀態。視圖狀態爲 的控制樹必須與前一個請求期間用於保存視圖狀態的控制樹相匹配。例如,動態添加 控件時,在回發期間添加的控件必須匹配 在初始 請求期間添加的控件的類型和位置。

+0

嘗試第一結合網格視圖中,然後訪問其數據。此外,爲什麼你需要存儲該ID。當提供請求時,該「ID」變量將消失。 – neo

+0

嗯,我已經看過幾次討論,但我沒有找到答案。這只是一個簡單的Gridview,帶有編輯,取消,更新功能和搜索框來搜索gridview。問題出在gridview的索引上。例如,Gridview中有10行,如果您嘗試自己製作此GridView並在第10行中搜索一個值,則會顯示一行,即第10行,如果該行很好,但如果單擊編輯,則所有十行顯示和編輯索引轉到第一行。 –

+0

你說什麼「如果你試圖讓這個網格自己查看」是什麼意思? – neo

回答

0

您可以在BindGridView方法中使用參數。 txtSearch是用於搜索gridview的文本框ID。如果您搜索一個值並單擊編輯,它將保持在選定的行上。

例如:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindGridView(this.txtSearch.Text); 


    } 
} 

protected void BindGridView(string column1) 
{ 

    SqlCommand cmd = new SqlCommand("select * from table1 where (column1 like '%" + txtSearch.Text + "%')", con); 
    con.Open(); 
    cmd.Parameters.AddWithValue("@column1 ", column1); 
    GridView1.DataSource = cmd.ExecuteReader(); 
    GridView1.DataBind(); 
    con.Close(); 

} 

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindGridView(this.txtSearch.Text); 

} 

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindGridView(this.txtSearch.Text); 
} 
+0

@ user3259951 - 謝謝,它的工作原理。 –

相關問題