我在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 为什么啊。        }
    }

解决方案 »

  1.   

    DataBound事件发生在ItemUpdating事件之后...你这样写是有问题的...好好的模板不用搞什么动态控件...
      

  2.   


    能告诉我为什么应该找到么?当你回发时,别说DetailsView1,就是Page都是新的对象了,这个你了解么?新的DetailsView1中根本没有你添加的东西。这就是.net的WebForm与WinForm编程的区别。如果你要快速开发,在设计界面上的模板中声明好。因为asp.net生成的程序会正确地编程,而不需要你手写一行代码。
      

  3.   

    因为这个字段是一个权限的int值:比如255 他是又 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128  得出来的。 每一个值都是以个 CheckBox。而这个值是由未知个CheckBox组成的,所以怎么用模板啊?
    我在 Page_Load中 强行加入DetailsView1_DataBound(null,null)的调用,第一个问题就解决了,但是这些CheckBox变化又不能捕获了。
      

  4.   

    哈哈问题解决了 ,我用SocketHook看了看,在回发的时候 的确发送dd0-dd13的数据,所以在Page_load里 不管是不是 IsPockBack都调用DetailsView1_DataBound,生成一次CheckBox控件就可以了 ,asp.net可以帮你附上值得。