<asp:datalist id="DistList" runat="server" >
 <ItemTemplate>
   <asp:datalist id="BuildList" runat="server"  >
     <ItemTemplate>
<asp:CheckBox ID="chkBld" AutoPostBack="True" Runat="server" Checked="True" EnableViewState="true"></asp:CheckBox>
      </ItemTemplate>
   </asp:datalist>
</ItemTemplate>
</asp:DataList>


private void DistList_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
System.Web.UI.WebControls.DataList BuildList;
BuildList = (DataList)e.Item.FindControl("BuildList");
BuildList.ItemCreated += new DataListItemEventHandler(BuildList_ItemCreated);
//...
} private void BuildList_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBox chkBld = (CheckBox)e.Item.FindControl("chkBld"); 
chkBld.CheckedChanged += new System.EventHandler(this.chkBld_CheckedChanged);
}} private void chkBld_CheckedChanged(object sender, System.EventArgs e)
{

CheckBox chb = (CheckBox)sender;
DataTable dt = new DataTable();      if( !chb.Checked )
{}
else{}
//...
}

动态生成 第二层datalist ,在第二层datalist里动态生成checkbox。
为什么chkBld_CheckedChanged 无法触发 ?  checkbox AutoPostBack="True"
是viewstate的问题?如果只有一层datalist的时候,checkbox的 viewstate能很好地得到,CheckedChanged也能很好地触发谢谢!100分

解决方案 »

  1.   

    樣板列裏面無法觸發子控件事件,但是會觸發DistList_ItemCommand事件
      

  2.   


    没对ItemDataBound ,ItemDataCreated做研究,不是很清楚,所以犯了错误。
    知道怎么回事了 
    谢谢大家
    BuildList_ItemDataBound -〉BuildList_ItemDataCreated就行了。
      

  3.   

    <asp:datalist  id="DistList"  runat="server"  >  
     <ItemTemplate>                          
         <asp:datalist  id="BuildList"  runat="server" >                                  
             <ItemTemplate>  
               <asp:CheckBox  ID="chkBld"  AutoPostBack="True"  Runat="server"  Checked="True"  EnableViewState="true"></asp:CheckBox>                                                  
               </ItemTemplate>  
         </asp:datalist>  
    </ItemTemplate>  
    </asp:DataList>  
                                                                                                     
                                                                                                     
    private  void  DistList_ItemCreated(object  sender,  System.Web.UI.WebControls.DataListItemEventArgs  e)  
    {  
               System.Web.UI.WebControls.DataList  BuildList;  
               BuildList  =  (DataList)e.Item.FindControl("BuildList");  
               BuildList.ItemCreated  +=  new  DataListItemEventHandler(BuildList_ItemCreated);  
                                       //...  
    }              
     
    private  void  BuildList_ItemCreated(object  sender,  System.Web.UI.WebControls.DataListItemEventArgs  e)  
    {  
               if  (e.Item.ItemType  ==  ListItemType.Item    &brvbar;  &brvbar;  e.Item.ItemType  ==  ListItemType.AlternatingItem)  
               {  
                           CheckBox  chkBld  =  (CheckBox)e.Item.FindControl("chkBld");    
                           chkBld.CheckedChanged  +=  new  System.EventHandler(this.chkBld_CheckedChanged);  
    }  
     
    }                                      
     
    private  void  chkBld_CheckedChanged(object  sender,  System.EventArgs  e)  
    {  
                                         
               CheckBox  chb  =  (CheckBox)sender;  
               DataTable  dt  =  new  DataTable();  
     
               if(  !chb.Checked  )  
               {}  
               else{}  
                                       //...  
    }  这样ok了