读书人

FindControl() 不能用变量做参数? ~

发布时间: 2013-11-19 22:55:29 作者: rapoo

FindControl() 不能用变量做参数? 在线等~~~~急。。。。
请问,aspx页有固定5个Panel,如何在.cs页根据一个变量i进行Visible的显示?
如:
<asp:Panel ID="Panel1" runat="server" Visible="false">
</asp:Panel>
<asp:Panel ID="Panel2" runat="server" Visible="false">
</asp:Panel>
<asp:Panel ID="Panel3" runat="server" Visible="false">
</asp:Panel>
<asp:Panel ID="Panel4" runat="server" Visible="false">
</asp:Panel>
<asp:Panel ID="Panel5" runat="server" Visible="false">
</asp:Panel>

-------------------------------------------
.CS

for (int i = 1; i < numSum; i++)
{}
例如i=3,则Panel1~3的Visible = true;该怎么写?

我这样写的:
for (int i = 1; i < numSum; i++)
{
string PanelID = "Panel" + i.ToString();
Panel PanelNow = (Panel)FindControl(PanelID);
PanelNow.Visible = true;
}

但提示无实例化。断点显示,PanelID可以传入,但PanelNow的值为null.
请教该怎么写?
[解决办法]


--页面中form内
<form id="form1" runat="server">
<div>
<asp:Panel ID="Panel1" runat="server" Visible="true">a
</asp:Panel>
<asp:Panel ID="Panel2" runat="server" Visible="false">b
</asp:Panel>
<asp:Panel ID="Panel3" runat="server" Visible="false">c
</asp:Panel>
<asp:Panel ID="Panel4" runat="server" Visible="false">d
</asp:Panel>
<asp:Panel ID="Panel5" runat="server" Visible="false">e
</asp:Panel>

</div>

</form>

--cs

protected void Page_Load(object sender, EventArgs e)
{
bindData();
}
protected void bindData()
{
int numSum = 5;

Panel PanelNow = new Panel();

for (int i = 1; i <= numSum; i++)
{
string PanelID = "Panel" + i.ToString();
PanelNow = (Panel)Page.FindControl(PanelID);
PanelNow.Visible = true;

}
}

[解决办法]
在page_load里面是肯定写不出来。Page_Load是加载事件和控件,东西都还没加载完你去获取什么控件啊?
去了解一下页面生命周期:http://www.cnblogs.com/kingboy2008/archive/2010/07/04/2055558.html

不建议在page_load里FindControl() 。
在外面写方法吧。

读书人网 >asp.net

热点推荐