我在DetailsView1_DataBound事件里动态加入了几个CheckBox控件,但是在ItemUpdating事件里却找不到这几个控件了,为什么啊 。protected void DetailsView1_DataBound(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{ CheckBox d1 = new CheckBox();
d1.ID = "dd0";
d1.Text = "用户帐户";
DetailsView1.Rows[4].Cells[1].Controls.Add(d1);
}
}protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
//这个pass控件不是动态加的 ,所以在这里能找到
TextBox pa = DetailsView1.Rows[2].Cells[1].FindControl("pass") as TextBox;
CheckBox d = DetailsView1.Rows[4].Cells[1].FindControl("dd0") as CheckBox;
//上面这里就是找不到dd0这个控件,=null 为什么啊。 }
}
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{ CheckBox d1 = new CheckBox();
d1.ID = "dd0";
d1.Text = "用户帐户";
DetailsView1.Rows[4].Cells[1].Controls.Add(d1);
}
}protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
//这个pass控件不是动态加的 ,所以在这里能找到
TextBox pa = DetailsView1.Rows[2].Cells[1].FindControl("pass") as TextBox;
CheckBox d = DetailsView1.Rows[4].Cells[1].FindControl("dd0") as CheckBox;
//上面这里就是找不到dd0这个控件,=null 为什么啊。 }
}
能告诉我为什么应该找到么?当你回发时,别说DetailsView1,就是Page都是新的对象了,这个你了解么?新的DetailsView1中根本没有你添加的东西。这就是.net的WebForm与WinForm编程的区别。如果你要快速开发,在设计界面上的模板中声明好。因为asp.net生成的程序会正确地编程,而不需要你手写一行代码。
我在 Page_Load中 强行加入DetailsView1_DataBound(null,null)的调用,第一个问题就解决了,但是这些CheckBox变化又不能捕获了。