嵌套的那个DataList需要根据外面的DataList的一个值来显示内容 
比如说一个订单 要根据外面的DataList中的订单编号这个字段的值 然后在嵌套的DataList中显示这个订单包含的商品该怎么做?DataList

解决方案 »

  1.   

    你可以参考一下,用的是Repeater,DataList差不多:http://blog.csdn.net/guwei4037/article/details/7404986
      

  2.   

    参考
    http://blog.csdn.net/279503482/article/details/5685059
      

  3.   

    DataList1_ItemDataBound这个事件中这么写的        Label lab = (Label)DataList1.Items[e.Item.ItemIndex].FindControl("Label1");
            string orderId = lab.Text;
            DataList dl = e.Item.FindControl("DataList2") as DataList;
            dl.DataSource = om.SelOrderItemByOrderId(orderId);
            dl.DataBind();为什么Label那行总是报 索引超出范围
      

  4.   


    你一定要这么写:Label label= e.Item.FindControl("Label1") as Label;
      

  5.   


    你一定要这么写:Label label= e.Item.FindControl("Label1") as Label;
    还是一样超出范围
      

  6.   

    前台代码:
    <table border="1">
                <asp:DataList ID="DataList1" runat="server" 
                    onitemdatabound="DataList1_ItemDataBound">
                    <ItemTemplate>
                        <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("id") %>' />
                        <tr>
                            <td>HiddenField1=<%#Eval("id") %>
                            </td>
                        </tr>
                        <asp:DataList ID="DataList2" runat="server">
                            <ItemTemplate>
                                <tr>
                                    <td>
                                        <table border="1">
                                            <tr>
                                                <td>table1=<%#Eval("table1") %>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                            </ItemTemplate>
                        </asp:DataList>
                    </ItemTemplate>
                </asp:DataList>
            </table>
    后台代码:        protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //绑定 外层 DataList
                    DataList1.DataSource = TM.DBUtility.DbHelperSQL.GetDataTable("select top 5 * from Table_1"); ;
                    DataList1.DataBind();
                }
            }
            //外层DataList绑定
            protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
            {
                DataList dl2 = (DataList)e.Item.FindControl("DataList2");            #region 方法一 外层DataList数据源包含内层DataList数据时            System.Data.DataTable dt = TM.DBUtility.DbHelperSQL.GetDataTable("select top 5 * from Table_2");
                //内层数据源添加一列
                dt.Columns.Add(new System.Data.DataColumn("id1"));
                foreach (System.Data.DataRow dr in dt.Rows)
                {
                    //外层服务器控件赋值到内层数据源
                    dr["table1"] = ((HiddenField)e.Item.FindControl("HiddenField1")).Value;
                }
                #endregion            #region 方法二 外层外层DataList数据源包含内层DataList数据条件时            dt = TM.DBUtility.DbHelperSQL.GetDataTable("select top 5 * from Table_2 where id1=" + ((HiddenField)e.Item.FindControl("HiddenField1")).Value);            #endregion            dl2.DataSource = dt;
                dl2.DataBind();
            }