2017-04-06 104 views
1

GridView_RowUpdating事件中出現錯誤(索引超出範圍,必須是非負數,小於集合的大小, 參數名稱:索引)。我嘗試了一些發佈在這裏的想法,但仍然得到這個錯誤。指數超出範圍。必須是非負數且小於集合的大小。

代碼隱藏

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    Label stu_name= ((Label)GridView1.Rows[e.RowIndex].FindControl("student_Name")); 
} 
+0

嘗試調試。可能它是'-1',當沒有行被選中時。 –

+0

它正確顯示rowindex(e.RowIndex) – user7415073

+0

在'GridView1.Rows.Count'和'e.RowIndex'的調試期間添加監視並共享兩個表達式的結果以調查問題。 –

回答

0

雖然編碼器的偏見是讓代碼產生期望的結果,如果發生異常就意味着它會再次出現。如果視圖狀態GridView1啓用

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    var grid = sender as Grid; 
    if (grid == null) return; 

    var rowIndex = e.RowIndex; 
    var rows = grid.Rows; 
    if (rowIndex < 0 || rowIndex > rows.Count - 1) return; 
    Label stu_name= ((Label) rows[rowIndex].FindControl("student_Name")); 
} 
0

檢查:

大弄清楚所有的數據綁定和ViewState的黑暗魔法,但可能也是一個好主意,更保守一點從一開始就假設。

如果禁用ViewState,則ASP.NET將無法正確更新,因爲ASP.NET會處理更新或其他任何需要保留以前數據的事件。

在情況下,ViewState的==假的,GridView1.Rows[e.RowIndex],將失敗,因爲GridView1.Rows.Count將爲0

此外,如果你是在Page_Load中做的DataBind,然後確保你的數據綁定只有!的IsPostBack。

if(!IsPostBack) 
// DataBind Grid .. 
+0

剛剛我注意到,Rowediting事件觸發兩次,第一次顯示grid.but在第二次顯示EmptyDataTemplate文本 – user7415073

+0

好的。確保你在每個PostBack上不要綁定數據。在DataBind之前檢查!IsPostBack。 – Habeeb

相關問題