前台代码:
 <asp:DataList ID="DataList1" runat="server" EnableViewState="False" RepeatColumns="1">
               <ItemTemplate>
                <table align="center" border="0" cellpadding="3" cellspacing="1">
            
            <tr>
                <td align="middle" width="150">
                    <%# Eval("BigClassName").ToString()%> <br />
                    <asp:DataList ID="DataList3" runat="server">            
                       <ItemTemplate>
                         <%# Eval("SmallClassName").ToString()%>
                       </ItemTemplate>
                   </asp:DataList>
                    
                </td>
               
                <td align="middle" width="184"><%# Eval("BigID").ToString() %>
                    &nbsp;</td>
                <td align="middle" height="20" width="150">
                    添加子栏目|修改|删除</td>
            </tr>
        </table>
        </ItemTemplate>
        </asp:DataList>
后台代码: protected void Page_Load(object sender, EventArgs e)
    {
        string cmd = "select * from Hover_BigClass_New";
               DataSet ds = new DataSet();
        OleDbDataAdapter dr = new OleDbDataAdapter();        OleDbConnection constr = DBConnections.DBConnections.createConnection();
        constr.Open();        dr.SelectCommand = new OleDbCommand(cmd,constr);
        dr.Fill(ds,"cmd");        DataList1.DataSource = ds;
        DataList1.DataBind();        dr.Dispose();
        dr = null;
        ds.Dispose();
        ds = null;
        constr.Close();
    }    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        
            OleDbConnection constr = DBConnections.DBConnections.createConnection();
            constr.Open();            OleDbCommand cs=new OleDbCommand();
            cs.Connection=constr;
            cs.CommandText="select * from Hover_SmallClass_New";            DataSet ds = new DataSet();
            OleDbDataAdapter dr = new OleDbDataAdapter();            dr.SelectCommand = cs;
            dr.Fill(ds);            DataList DL = (DataList)e.Item.FindControl("DataList2");
            DL.DataSource = ds;
            DL.DataBind();            dr.Dispose();
            dr = null;
            ds.Dispose();
            ds = null;
            constr.Close();
       
    }
}为什么只能列出来第一个DataList的数据,第二个datalist没有反应...;.

解决方案 »

  1.   

    执行了吗?真的取道数据了吗?
    测试下->dr.SelectCommand = cs; 
                dr.Fill(ds); 
    Response.Write(ds.Tables[0].Rows.Count); // ?
      

  2.   

    datalist1的数据是显示了,而datalist3的没有显示了,提示一点.上边应是datalist3改过来了,不过还是没有数据.
    楼上的,那句代码没起作用.郁闷
      

  3.   

    有个问题,一般要嵌套DataList的话,都是子DataList的数据和主DataList的某项值相关,
    select * from Hover_SmallClass_New ,
    如果数据都不筛选的话,又是在vs2005下开发的话,可以考虑直接在页面绑定好数据呀 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Weith_SPHOAConnectionString %>"
                ProviderName="<%$ ConnectionStrings:Weith_SPHOAConnectionString.ProviderName %>"
                SelectCommand="SELECT * FROM [Information]"></asp:SqlDataSource>
            <br />
            <asp:DataList CssClass="list" ID="DataList1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="DataList1_ItemDataBound" RepeatColumns="3">
           <SelectedItemStyle Wrap="False"></SelectedItemStyle>
    <EditItemStyle Wrap="False"></EditItemStyle>
    <AlternatingItemStyle Wrap="False"></AlternatingItemStyle>
    <ItemStyle Wrap="False"></ItemStyle>
    <ItemTemplate>
    &nbsp;|&nbsp;<a href='Information.aspx?id=<%# Eval("InformationID") %>' ><%# Eval("Title").ToString().Length > 20 ? Eval("Title").ToString().Substring(0, 20) : Eval("Title").ToString()%></a>
    <%# Eval("SendDate","{0:yyyy-MM-dd}")%>&nbsp;┊&nbsp;
                        <asp:DataList ID="DataList3" runat="server" DataSourceID="SqlDataSource1">
                        <ItemTemplate>
    &nbsp;|&nbsp;<a href='Information.aspx?id=<%# Eval("InformationID") %>' ><%# Eval("Title").ToString().Length > 20 ? Eval("Title").ToString().Substring(0, 20) : Eval("Title").ToString()%></a>
    </ItemTemplate>
                        </asp:DataList>
    </ItemTemplate>
            </asp:DataList>
      

  4.   

    设个断点看看,数据库中有数据吗orthis.ClientScript.RegisterStartupScript(this.GetType(), "testCoutn", "<script>alert(" + ds.Tables[0].Rows.Count + ")</script>");
      

  5.   

    从断点上来看,好像程序只运行page_load部分,protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)这部分根本就没有运行
      

  6.   

    Page_Load没加 if(!IsPostBack){绑定数据} 的判断将来迟早出问题
      

  7.   

    当断点运行到datalist1.batabind();
    第一个datalist1出现数据后,运行那个绿色按钮就变灰了.
    后面的代码没有运行
      

  8.   

     <asp:DataList ID="DataList3" runat="server">            
                          <ItemTemplate> 
                            <%# Eval("SmallClassName").ToString()%> 
                          </ItemTemplate> 
                      </asp:DataList> 
    *************************************************************************
    DataList DL = (DataList)e.Item.FindControl("DataList2"); 
    加上if(!IsPostBack)
    EnableViewState="True"
      

  9.   

    在datalist1加OnItemDataBound="DataList1_ItemDataBound">就可以显示datalist3的数据了...但是还有个问题,,,
    datalist3不是按要求显示,而是每一条datalist1数据下会全列出datalist3的数据...怎么解决这个问题
      

  10.   

    和8楼一样!其他看不出来<asp:DataList ID="DataList3" runat="server">            
                          <ItemTemplate> 
                            <%# Eval("SmallClassName").ToString()%> 
                          </ItemTemplate> 
                      </asp:DataList> 
    ************************************************************************* 
    DataList DL = (DataList)e.Item.FindControl("DataList2"); 
    加上if(!IsPostBack) 
    EnableViewState="True"
      

  11.   

    不是那个问题。。比如,现在Datalist1在数据库中有以下数据,AA,BB,CC,AA下的Datalist3对应aa,aa1,
    BB对应bb,bb1,CC对应cc,cc1.
    正确显示,应是这样。
    AA
    aa
    aa1
    BB
    bb
    bb1
    现在的情况是显示这样的
    AA
    aa
    aa1
    bb
    bb1
    cc
    cc1
    ----
    BB
    aa
    aa1
    bb
    bb1
    cc
    cc1
    也就是说,应有一个值从datalist1传给datalist3 ,让datalist3显示这个值相应的数据。
      

  12.   

    经查找资料做了以下修改,但是数据绑定这块又有问题了。高手们帮我看一下。前台代码
     <asp:DataList ID="DataList1" runat="server" EnableViewState="False" DataKeyField="BigClassName" RepeatColumns="1" OnItemDataBound="DataList1_ItemDataBound">
                   <EditItemStyle Wrap="False"></EditItemStyle>
                    <AlternatingItemStyle Wrap="False"></AlternatingItemStyle>               <ItemTemplate>
                    <table align="center" border="0" cellpadding="3" cellspacing="1">
                
                <tr>
                    <td align="middle" width="150">
                        <%# Eval("BigClassName").ToString()%> <br />
                        <asp:DataList ID="DataList3" runat="server" EnableViewState="True">            
                           <ItemTemplate>
                             <asp:Label ID="Label_li" runat="server" Text='<%# Eval("SmallClassName").ToString()%>'></asp:Label>
                           </ItemTemplate>
                       </asp:DataList>

                        
                    </td>
                   
                    <td align="middle" width="184"><%# Eval("BigID").ToString() %>
                        &nbsp;</td>
                    <td align="middle" height="20" width="150">
                        添加子栏目|修改|删除</td>
                </tr>
            </table>
            </ItemTemplate>
            </asp:DataList>
    后台代码:
    public partial class ClassConter : System.Web.UI.Page
    {
        string cmd = "select * from Hover_BigClass_New";
        DataSet ds = new DataSet();
        OleDbDataAdapter dr = new OleDbDataAdapter();    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {            OleDbConnection constr = DBConnections.DBConnections.createConnection();
                constr.Open();            dr.SelectCommand = new OleDbCommand(cmd, constr);
                dr.Fill(ds, "cmd");            DataList1.DataSource = ds;
                DataList1.DataBind();            dr.Dispose();
                dr = null;
                ds.Dispose();
                ds = null;
                constr.Close();
            }
        }    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            //for (int i = 0; i < DataList1.Items.Count; i++)
            //{
            if (!IsPostBack)
            {
                OleDbConnection constr = DBConnections.DBConnections.createConnection();
                constr.Open();            OleDbCommand cs = new OleDbCommand();
                cs.Connection = constr;
                cs.CommandText = "select * from Hover_SmallClass_New";            DataSet ds1 = new DataSet();
                OleDbDataAdapter dr1 = new OleDbDataAdapter();            dr1.SelectCommand = cs;
                dr1.Fill(ds1);
                           Label li = (Label)e.Item.FindControl("Label_li");
                int a1 = Convert.ToInt32(li.Text);
                ds1.rrjj(ds, a1);//这里是重点问题??????

                
                //DataList DL = (DataList)DataList1.Items[i].FindControl("DataList3");
                DataList DL = (DataList)e.Item.FindControl("DataList3");
                
                //EnableViewState = "True";
                DL.DataSource = ds1;
                DL.DataBind();            dr1.Dispose();
                dr1 = null;
                ds1.Dispose();
                ds1 = null;
                constr.Close();
            }
           
        }}
    怎么解决绑定数据的问题?????
      

  13.   

    有,datalist1取的是表Hover_BigClass_New中的BigClassName,而datalist3取的是Hover_SmallClass_New中的
    SmallClassName,SmallClassName要根据BigClassName来取值,有时BigClassName下有好几个SmallClassName
    的值,也有时一个也没有
      

  14.   

    这完全是数据库表键关系的问题了
    如你的AA某个ID是1 BB的该ID是2
    将aa、aa1的某列ID设为1
    bb、bb1的该列值设为2
    这是最简单的解决方案
      

  15.   

    在DataList1_ItemDataBound中加上 
    if(e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.Item)
    {
       ....
    }
    试试看。
      

  16.   

    告诉楼主一个最简单的方法,不用放在DataList1_ItemDataBound里面
    int count=this.DataList1.Items.Count
    if(count>=1)
    {
    for(int j=0;j<count;j++)
    {
    int Id=int.Parse(DataList1.DataKeys[j].ToString());//关联ID
    DataList DataList3=(DataList)this.DataList1.Items[j].FindControl("DataList3"); DataList1.DataSource=//数据源
    DataList1.DataBind();
    }
    }
      

  17.   

    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 

        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            OleDbConnection constr = DBConnections.DBConnections.createConnection();
            constr.Open();        OleDbCommand cs = new OleDbCommand();
            cs.Connection = constr;
            cs.CommandText = "select * from Hover_SmallClass_New";        DataSet ds1 = new DataSet();
            OleDbDataAdapter dr1 = new OleDbDataAdapter();        dr1.SelectCommand = cs;
            dr1.Fill(ds1);
            Label li = (Label)e.Item.FindControl("Label_li");
            int a1 = Convert.ToInt32(li.Text);
            ds1.rrjj(ds, a1);//这里是重点问题??????         //DataList DL = (DataList)DataList1.Items[i].FindControl("DataList3"); 
            DataList DL = (DataList)e.Item.FindControl("DataList3");        //EnableViewState = "True"; 
            DL.DataSource = ds1;
            DL.DataBind();        dr1.Dispose();
            dr1 = null;
            ds1.Dispose();
            ds1 = null;
            constr.Close();
        } 
    }
      

  18.   

    DataList嵌套DataList(1. 页面绑定后台代码实现 纯代码)
    http://blog.csdn.net/amandag/archive/2008/06/11/2537079.aspx上面有4种方式楼主可参考
      

  19.   

    问题解决,代码发下:
    前台:
    <asp:DataList ID="DataList1" runat="server" EnableViewState="False" DataKeyField="BigClassName" RepeatColumns="1">
                   <EditItemStyle Wrap="False"></EditItemStyle>
                    <AlternatingItemStyle Wrap="False"></AlternatingItemStyle>               <ItemTemplate>
                    <table align="center" border="0" cellpadding="3" cellspacing="1">
                
                <tr>
                    <td align="middle" width="150">
                        <%# Eval("BigClassName").ToString()%> <br />
                        
                        <asp:DataList ID="DataList3" runat="server" EnableViewState="True" DataSource='<%# GetDetails(Eval("BigClassID").ToString()) %>'>          
                           <ItemTemplate>
                             <asp:Label ID="Label_ji" runat="server" Text='<%# Eval("SmallClassName").ToString()%>'></asp:Label>
                           </ItemTemplate>
                       </asp:DataList>
                        
                    </td>
                   
                    <td align="middle" width="184"><%# Eval("BigID").ToString() %>
                        &nbsp;</td>
                    <td align="middle" height="20" width="150">
                        添加子栏目|修改|删除</td>
                </tr>
            </table>
            </ItemTemplate>
    后台:
    public partial class ClassConter : System.Web.UI.Page
    {
        string cmd = "select * from Hover_BigClass_New";
        DataSet ds = new DataSet();
        OleDbDataAdapter dr = new OleDbDataAdapter();    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {            OleDbConnection constr = DBConnections.DBConnections.createConnection();
                constr.Open();            dr.SelectCommand = new OleDbCommand(cmd, constr);
                dr.Fill(ds, "cmd");            DataList1.DataSource = ds;
                DataList1.DataBind();
                DataList1.DataKeyField = "BigClassID";            dr.Dispose();
                dr = null;
                ds.Dispose();
                ds = null;
                constr.Close();
            }
        }
        protected DataTable GetDetails(string BigClassID)  
        {
           
                OleDbConnection constr = DBConnections.DBConnections.createConnection();
                constr.Open();            OleDbCommand cs = new OleDbCommand();
                string sqls = "select SmallClassName from Hover_SmallClass_New where BigClassID=@BigClassID";            DataSet ds1 = new DataSet();
                OleDbDataAdapter dr1 = new OleDbDataAdapter(sqls,constr);       
                dr1.SelectCommand.Parameters.AddWithValue("@BigClassID", BigClassID);
                dr1.Fill(ds1);
                return ds1.Tables[0];
                ds1.Dispose();
                ds1 = null;                       constr.Close();
                
        }}