2011-04-06 46 views
2

我使用的是ASP.NET,我有一個GridView,它在editTemplate中有一個TextBox,但我無法找到控件;每當我嘗試將值分配給GridViewTextBox時,我都會收到NullReferenceException如何在網格內找到文本框的控件

我的代碼如下:

for (int i = 0; i < grdTransfer.Rows.Count; i++) 
{ 
    GridViewRow row = grdTransfer.Rows[i]; 
    if (((CheckBox)row.FindControl("chkSelect")).Checked) 
    { 
     count = 1; 
     (row.FindControl("txtDestLocation") as TextBox).Text = txtLocation.Text; 
    } 
} 

問題:NullReferenceException: object reference not set to the instance of an object

這意味着我得到null每當我試圖在運行時的GridViewTextBox值從TextBox外分配。

我在做什麼錯?

+0

是WPF/Silverlight嗎? – Yanshof 2011-04-06 11:28:12

+0

1.您是否動態添加「txtDestLocation」? 2.你想在哪個事件中執行這段代碼? – 2011-04-06 11:44:25

+0

是的我動態地添加txtDestLocation – 2011-04-07 10:31:40

回答

1

一些事情。

  1. WHERE是錯誤發生,我看到兩個可能的地方。
  2. 網格是否有頁眉或頁腳?你沒有檢查任何一個?
  3. 爲什麼不作爲GridView.RowDataBound活動的一部分來做這件事?
+3

隨着標題行也檢查腳註行,如果它存在。否則,循環的最後一次迭代將再次引發此錯誤。 – MUS 2011-04-06 11:51:29

+0

@ CSGuy,謝謝,更新回答 – tster 2011-04-06 16:06:10

0

我想你在最後一個循環中得到了這個異常。

網格行集合索引從零開始,但計數將返回總行數。所以,你應該使用計數-1,同時通過循環...

for (int i = 0; i < grdTransfer.Rows.Count -1; i++) ..

我寧願使用的foreach(GridViewRow行grdTransfer.Rows)來代替。

+3

提及使用foreach +1,因爲認爲你需要從Count中減去1(他使用的是小於運算符)。 – tster 2011-04-06 12:27:00

+0

@tster尼斯趕:)我沒有意識到他正在使用<。 – 2011-04-06 15:58:56