Как я могу прочитать динамически созданное текстовое поле (gridview OnRowUpdating) - PullRequest
0 голосов
/ 20 января 2011
 <asp:GridView ID="GridView1" runat="server"  >

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

                    </ItemTemplate> 
                </asp:TemplateField>

</asp:GridView> 

обновление:

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

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, и когда я пытаюсь получить значение, то получаю ноль

вот мой код:

 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);  
                    } 
}

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Вот как я могу решить эту проблему: вместо создания в rowdatabound я создаю на 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 голосов
/ 20 января 2011

Вы создаете текстовое поле для каждой строки - 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);  
                    } 
        }

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

...