.aspx文件有如下代码:
<asp:Table id="tabMenu" runat="server"><asp:TableRow><asp:TableCell></asp:TableCell></asp:TableRow></asp:Table>
.cs文件部分代码如下:
for(int i=0;i<10;i++)
{
CheckBox cb = new CheckBox();
cb.ID = i.ToString(); //只是举例子,ID是动态生成的,并且未知
cb.Text = i.ToString();
tabMenu.Rows[0].Cells[0].Controls.Add(cb);
}
问题:
提交后,调试程序,
tabMenu.Rows[0].Cells[0].Controls.Count 的值为0,怎样修改程序才可以通过tabMenu.Rows[0].Cells[0].Controls 集合访问CheckBox?
<asp:Table id="tabMenu" runat="server"><asp:TableRow id="row1"><asp:TableCell id="cell1"></asp:TableCell></asp:TableRow></asp:Table>
为服务器控件加上id
然后
for(int i=0;i<10;i++)
{
CheckBox cb = new CheckBox();
cb.ID = i.ToString(); //只是举例子,ID是动态生成的,并且未知
cb.Text = i.ToString();
//tabMenu.Rows[0].Cells[0].Controls.Add(cb);
this.cell1.Controls.Add(cb);
}
你的创建子控件的程序的位置不对,必须放在控件呈现的事件中,或访问tabMenu.Rows[0].Cells[0].Controls.Count 的程序前,特别注意submit后该子对象也必须先创建后使用,
不要以为提交前创建了,提交后可以直接使用。这是许多使用ASP。NET朋友容易翻的错误
for(int i=0;i<10;i++)
{
CheckBox cb = new CheckBox();
cb.ID = i.ToString(); //只是举例子,ID是动态生成的,并且未知
cb.Text = i.ToString();
tabMenu.Rows[0].Cells[0].Controls.Add(cb);
}
这段代码要放到Page_Load中的每次postback都能执行到的地方就行了
aspx中:
<asp:table id="Table1" runat="server" Width="580" BorderColor="LightSteelBlue" BorderWidth="2px" HorizontalAlign="Center" border="1" borderColorLight="#e7e7e7" align="center" cellPadding="0" borderColorDark="#1871a6" cols="1" cellSpacing="0">
<asp:TableRow VerticalAlign="Middle" BorderColor="Transparent" HorizontalAlign="Center" ForeColor="Transparent" BackColor="LightSteelBlue"></asp:TableRow></asp:table>
aspx.cs中:(serviceTypeNum是我程序里的整形一个变量)
CheckBox[] cbServType = new CheckBox[serviceTypeNum];
for (int k = 0 ; k < serviceTypeNum ; k++)
{
cbServType[k] = new CheckBox();
cbServType[k].ID = "CheckBox1" + k;
cbServType[k].AutoPostBack = false;
cbServType[k].Text = k.ToString();
}
for (int k = 0 ; k < serviceTypeNum ; k++)
{
Table1.Rows[0].Cells[4].Controls.Add(cbServType[k]);
}
访问的代码如下:
for (int k = 0 ; k < serviceTypeNum ; k++)
{
if(((CheckBox)Table1.Rows[0].Cells[4].Controls[k]).Checked)
{ ... }
}