0
 <asp:GridView ID="GridView1" runat="server"  >

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

                    </ItemTemplate> 
                </asp:TemplateField>

</asp:GridView> 

アップデート:

ページのソースコードを表示した後、動的に作成したテキストボックスのIDが表示されます。

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に動的なテキストボックスをいくつか追加していますが、値を取得しようとするとnullが発生します

これが私のコードです:

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

2 に答える 2

0

各行にテキストボックスを作成しています-5つ...そして各行で、これらのテキストボックスのそれぞれは他の行と同じIDを持っています。たとえば、テキストボックスを作成するときに、その行のインデックスでテキストボックスの名前を指定する必要があります。同じIDのページをコントロールすることはできません。そうしないと、正しく見つかりません。

これを行う1つの方法があります。

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

これが完全なソリューションであることをテストすることはできませんが、開始する場所です。

于 2011-01-20T19:39:25.930 に答える
0

これが私が問題を解決する方法です:私がRowCreatedで作成しているrowdataboundで作成する代わりに、これが他の人に役立つことを願っています。

 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);
                    }
                }
            } 
于 2011-01-23T03:16:40.163 に答える