2013-08-20 42 views
0

On Grid_RowDataBound我在當前行的第8個單元格中添加了一個表格。此表是這樣的:在gridview中訪問動態控件中的數據

<table rules="all" border="0" style="width:100%;"> 
    <tbody> 
     <tr> 
      <td align="center"><input name="studentgrd$ctl03$ID2VAL4" type="text" value="6" maxlength="2" id="studentgrd_ctl03_ID2VAL4" style="width:20px;"></td> 
     </tr> 
    </tbody> 
</table> 

在保存按鈕的點擊,我試圖讓數據使用:

TextBox tb = (TextBox)studentgrd.FindControl("ID2VAL4"); 
TextBox tb = (TextBox)studentgrd.Rows[i].Cells[8].FindControl("ID2VAL4");//When looping through all rows 

但文本框爲空。那麼在回發中動態控件會丟失嗎?如果是,那麼如何保留它?如果不是,我會在哪裏出錯?

+0

是回發時丟失的動態控制值。要獲得值添加隱藏字段,然後將文本框的值在隱藏字段中使用JavaScript在文本框的lostfocus事件。 – Raghubar

+0

在那個單元格中會有動態數字的文本框如何決定隱藏字段的數量。 –

回答

0

您可以在點擊按鈕的方法分配這樣的GridviewRow:

GridViewRow gridViewRow = (GridViewRow)(((Control)sender).NamingContainer); 

在分配值,你應該將其更改爲:

TextBox tb = ((TextBox)gridViewRow .FindControl("ID2VAL4")); 

其中gridViewRowGridViewRow未在使用GridView本身。

+0

但Grid_RowDataBound不會在回發時調用,並且按鈕也不在grid中。我在回發時禁用了grid數據綁定,並且當button_Click中的所有語句都完成時,存在行最後一行studentgrd.DataBind();以反映這些變化。 –

+0

我改變了答案。上面的代碼只會在事件方法中,而不在DataRowBound中。 –

+0

無法投射「ASP.secure_studentgrade_aspx」類型的對象來鍵入「System.Web.UI.WebControls.GridViewRow」。 :/ –

0

我解決了我的問題:如果它是一個動態生成的控件,並且綁定到第一次加載的數據源,那麼在回發之後,您必須再次生成相同的控件並綁定它,然後嘗試訪問它們。

即使動態控件創建並綁定到一個數據源只是沒有,它會有用戶給出的改變的值(這讓我感到驚訝,我認爲是因爲動態控件的視圖狀態。錯誤)。