this article might be helpful for you:
Building a Master/Detail DataGrid
http://www.dotnetjunkies.com/tutorials.aspx?tutorialid=135

解决方案 »

  1.   

    如果DATASET中有多个表,可以通过DATASET.TABLES.COUNT来获取,但要在DATALIST中动态添加控件好象有点麻烦,因为我查看了DATALIST的方法,没有这样的方法的。
    不过,我想可以通过下面的方法尝试:
    把ITEMTEMPLATE的内容设置为一个PANEL,ID为PNL,然后在方法中对PNL动态添加对象,应该是可行的。
      

  2.   

    多谢!karma提供的页面我打不开啊,能否贴一份呢?
      

  3.   

    it is too long to post here
      

  4.   

    这是我的一个程序,datalist里放datalist<DIV style="Z-INDEX: 128; LEFT: 419px; OVERFLOW: auto; WIDTH: 286px; POSITION: absolute; TOP: 180px; HEIGHT: 302px" ms_positioning="GridLayout">
    <asp:datalist id="DataList1" style="Z-INDEX: 104; LEFT: 6px; POSITION: absolute; TOP: 11px" runat="server" Height="217px" Width="275px">
        <ItemTemplate>
    <asp:DataList id="DataList2" runat="server" Height="62" Width="191">
    <HeaderTemplate>
    _________________________________
    <br>
    <font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<%#head%>
    </font>
    <br>
    _________________________________
    </HeaderTemplate>
    <ItemTemplate>
    <font size="2">
    <%#DataBinder.Eval(Container,"DataItem.子模块")%>
    <asp:CheckBoxList Font-Size="X-Small" id="CheckBoxList1" runat="server" DataSource='<%#getarr(DataBinder.Eval(Container,"DataItem.操作","{0}"),DataBinder.Eval(Container,"DataItem.子模块","{0}"),DataBinder.Eval(Container,"DataItem.操作编码","{0}"))%>' RepeatDirection="Horizontal" DataTextField="text" DataValueField="value">
    </asp:CheckBoxList>
    </font>
    </ItemTemplate>
    </asp:DataList>
        </ItemTemplate>
    </asp:datalist>
    </DIV>
      

  5.   

    cs:
    ...
    public string head;
    ....Page_Load()
    {
    ...
    DataSet ds=new DataSet();
    ds.ReadXml(Server.MapPath("module.xml"));
    DataList1.DataSource=new string [ds.Tables.Count];
    DataList1.DataBind();
    for (int i=0;i<DataList1.Items.Count;i++)
    {
    ((DataList)DataList1.Items[i].FindControl("DataList2")).DataSource=ds.Tables[i];
    head=ds.Tables[i].TableName;
    ((DataList)DataList1.Items[i].FindControl("DataList2")).DataBind();
    }
      

  6.   

    用这样的方法也可以实现:
    读取所有数据(TABLE)到DS中,
    建立DATATABLE 变量DT,设置其数据是DS中的表名:
    在DATALIST0中设置一个LABEL1,并绑定到DT的表名字段
    绑定DATALIST0
    通过下面的程序实现DATAGRID0数据的绑定:
    string tablename;
    DataGrid dg;
    for(int i=0;i<Datalist0.Items.Length;i++)
    {
    tablename=((label)Datalist0.Items[i].FindControl("Label1")).Text.ToString();
    dg=(DataGrid)Datalist0.Items[i].FindControl("Datagrid0");
    dg.DataSource=DS.Tables[tablename].DefaultView;
    dg.DataBind();
    }
      

  7.   

    多谢各位!但有一点我不太明白的是:DataList当中Item的数量是如何确定的?如果用for循环,当然需要知道循环的次数。但上面两位给出的代码,循环的控制量都确定在DataList.Items.Length这个量上。不过我认为DataList当中Item的数量应该和DataSet当中Tables的数量相同才对啊。一般DataList绑定数据是根据DataView的数据条数确定Items数量比较常见。而使用DataTable作一个Item的数据来源,这应该如何理解绑定过程呢?敬请赐教!
      

  8.   

    你没搞明白
    ds.Tables.Count决定了DataList1的Item的个数
    也就是产生的DataList2的个数
    然后根据DataList1.Items.Count做循环
    绑定每个DataList2