2011-01-20 4 views
0
<asp:GridView ID="GridView1" runat="server" > 

<asp:TemplateField HeaderText="Token" SortExpression="Token" HeaderStyle-Width="100px"> 
        <ItemTemplate>      

        </ItemTemplate> 
       </asp:TemplateField> 

</asp:GridView> 

обновление:Как я могу читать динамически созданный текстовое поле (GridView OnRowUpdating)

после я просмотреть исходный код страницы Thsi является то, что я вижу идентификатор текстового поля, которое я создал динамический.

ctl00_ContentPlaceHolder1_tabControl_tabUsers_MyControl1_gv_ctl02__token0_3 

OnRowUpdating:

TextBox _token = gvOrg.Rows[e.RowIndex].Cells[7].FindControl("_token " + e.RowIndex + "_" + rowId) as TextBox; 

конец Обновление:

Я добавляю несколько текстовое поле динамического в OnRowDataBound и Whe я стараюсь получать значение, то я получаю нулевой

вот мой код:

protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     {  
      for (int rowId = 0; rowId < 5; rowId++) 
      { 
       TextBox _token = gvOrg.Rows[e.RowIndex].Cells[7].FindControl("_token" + rowId) as TextBox; 
      }  
     } 

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if ((e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) || (e.Row.RowState == DataControlRowState.Edit)) 
      { 

       if (e.Row.RowType == DataControlRowType.DataRow) 
       {            
        for (int rowId = 0; rowId < 5; rowId++) 
        {  
         TextBox txtBox = new TextBox(); 
         txtBox.ID = "_token" + rowId; 
         txtBox.Text = "token" + rowId; 
         e.Row.Cells[7].Controls.Add(txtBox); 
        } 
} 

ответ

0

вот как я могу решить проблему: вместо создания в rowdataound я создаю на RowCreated, надеюсь, что это поможет другим.

protected void gridviwe1_RowCreated(object sender, GridViewRowEventArgs e) 
     { 

       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        for (int rowId = 0; rowId < 5; rowId++) 
        { 
         TextBox txtBox = new TextBox(); 
         txtBox.ID = "_registration" + e.Row.RowIndex + "_" + rowId; 
         txtBox.Text = "_registration" + e.Row.RowIndex + "_" + rowId; 
         e.Row.Cells[7].Controls.Add(txtBox); 
        } 
       } 
      } 
+0

Почему это не помогает мне? Я создаю n количество текстовых полей в строке gridview, после обратной передачи я их создаю, потому что они удаляются после обратной передачи. После обратной передачи я могу увидеть текст, который я написал до обратной передачи, но не могу сохранить их в переменной. –

0

Вы создаете текстовое поле для каждой строки - 5 из них ... и в каждой строке каждое из этих текстовых полей имеет тот же идентификатор, что и другие строки. Например, в индексе строки вам нужно указать имя текстовых полей при их создании. У вас не может быть элемент управления на странице с тем же идентификатором, иначе он не может быть найден правильно.

Вот один из способов сделать это.

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if ((e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) || (e.Row.RowState == DataControlRowState.Edit)) 
      { 

       if (e.Row.RowType == DataControlRowType.DataRow) 
       {            
        for (int rowId = 0; rowId < 5; rowId++) 
        {  
         TextBox txtBox = new TextBox(); 
         txtBox.ID = "_token" + e.Row.RowIndex + "_" + rowId; 
         txtBox.Text = "token" + rowId; 
         e.Row.Cells[7].Controls.Add(txtBox); 
        } 
     } 

Я не могу проверить, что это полное решение, но это место для начала.

+0

good catch, я обновил свой код, а также обновил свой 'OnRowUpdating', но все еще получаю null - я обновил свой вопрос. –

+0

Отправьте свой код aspx для меня, и я исправлю его для вас. – TheGeekYouNeed

+0

Я обновил свой вопрос с помощью .aspx code –

Смежные вопросы