datalist嵌套datalist,里层datalist中有控件checkbox,代码选中checkbox却不能实现,都说要在内层的datalist再绑定次,我也绑定了却不起作用,大家帮忙看下啊!

解决方案 »

  1.   

    代码如下:
    for (int i = 0; i < dlTypeList.Items.Count; i++)
                            {                            
                                DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList");
                                for (int j = 0; j < dlWeightList.Items.Count; j++)
                                {
                                    CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb");
                                    ckb.Checked = true;
                                    
                                    int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
                                    InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
                                }                            
                            }
      

  2.   

    for (int j = 0; j < dlWeightList.Items.Count; j++)
                                {
                                    CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb");
                                    ckb.Checked = true; //不知有什么用
                                    
                                    int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
                                    InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
                                }
      

  3.   

    用js写check看看
    for (int i = 0; i < dlTypeList.Items.Count; i++)
                            {                            
                                DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList");
                                for (int j = 0; j < dlWeightList.Items.Count; j++)
                                {
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>document.getElementById('ckb').check = true ;</script>");                                CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb");                                ckb.Checked = true;
                                    
                                    int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
                                    InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
                                }                            
                            }
      

  4.   

    用 javascript 和隐藏INPUT 来处理选中的Checkbox对应的记录ID
      

  5.   

    eg:
    嵌套的DataList里面放一个:
    <input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()">嵌套的DataList绑定时:
    private void DataList2_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    HtmlInputCheckBox chk = e.Item.FindControl("checkbox1") as HtmlInputCheckBox;
    if(chk != null)
    {
    DataRowView dr = e.Item.DataItem as DataRowView;
                        if(dr != null)
    chk.Attributes.Add("sublistid", "sub_" + dr["IntegerValue"].ToString());
    }
    }
    }
      

  6.   

    <asp:datalist id="DataList1" runat="server" width="100%">
    <itemtemplate>
    <div><%# DataBinder.Eval(Container.DataItem, "IntegerValue") %></div>
    <hr width="100%">
    <asp:datalist id="DataList2" runat="server" width="100%">
    <itemtemplate>
    <hr width="50%">
    <div><%# DataBinder.Eval(Container.DataItem, "DateTimeValue") %>: <input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()">
    checkbox
    </div>
    </itemtemplate>
    </asp:datalist>
    </itemtemplate>
    </asp:datalist><script language="javascript">
    <!--
    function clickBox()
    {
    var obj = event.srcElement;
    //sublistid="sub_6"
    if(obj.checked)
    alert( obj.getAttribute("sublistid") );
    }
    //-->
    </script>把选中的Checkbox的自定义属性sublistid的值保存到下来,POST后就可以处理了
      

  7.   

    小妹在此谢过大家的热心帮助!
    重新说明下,内层的datalist是程序让checkbox选中而不能实现,估计是状态丢失!
      

  8.   

    如果你想让checkbox选中,那么“ ckb.Checked = true;”应该在整个页面的page_load事件之后的事件中执行。如果你的代码是在page_load 事件中或者之前执行的,好好考虑的你的逻辑。page_load是用来恢复上一个页面处理过程中的状态的,不是用来设置本次页面处理过程的状态的。如果哪个客户端操作触发的业务逻辑需要设置一些 ckb.Checked,就在这个操作对应的事件中处理,例如在按钮对应的事件中处理。如果肯定需要设置一些 ckb.Checked,而与客户端操作无关,就在 Prerender 事件中处理。总之,这些业务逻辑应该是写在页面的 page_load 之后的,不要写在 page_load 事件中处理。