XML数据如下:
 <Detail>
      <AirCompany>中国国际航空公司</AirCompany>
      <Flight>CA1412</Flight>
      <Model>73G</Model>
      <FlyTime>0740</FlyTime>
      <ArrivalTime>0955</ArrivalTime>
      <E>E</E>
      <Tax>50</Tax>
      <YPrice>1560</YPrice>
      <Class>
        <ClassCode>F</ClassCode>
        <Code>头等舱</Code>
        <Num>&gt;9张</Num>
        <Price>2340</Price>
      </Class>
      <Class>
        <ClassCode>Y</ClassCode>
        <Code>经济舱</Code>
        <Num>&gt;9张</Num>
        <Price>1560</Price>
      </Class>
    </Detail>
    <Detail>
      <AirCompany>中国国际航空公司</AirCompany>
      <Flight>CA4137</Flight>
      <Model>737</Model>
      <FlyTime>0840</FlyTime>
      <ArrivalTime>1045</ArrivalTime>
      <E>E</E>
      <Tax>50</Tax>
      <YPrice>1560</YPrice>
      <Class>
        <ClassCode>T</ClassCode>
        <Code>5.5折</Code>
        <Num>&gt;9张</Num>
        <Price>860</Price>
      </Class>
      <Class>
        <ClassCode>X</ClassCode>
        <Code>5折</Code>
        <Num>&gt;9张</Num>
        <Price>780</Price>
      </Class>
    </Detail>
 <Detail>

解决方案 »

  1.   

    孟子大哥,我参考了你写的用Reapter嵌套显示主-从表的文章,我也模仿着做,可是在从DataGrid时,没办法指定他的数据源,请老大帮忙!
      

  2.   

    下面是个简单的例子:
    _a.aspx
    =====================
    <%@ Page language="c#" Codebehind="_a.aspx.cs" AutoEventWireup="false" Inherits="ChinaEdustar.Web.__a" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <body>
    <form id="FrmDataGrid" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateColumn HeaderText="航班">
    <ItemTemplate>
    <asp:Label id="LB1" text='<%# DataBinder.Eval(Container.DataItem, "Flight") %>' Runat="server">
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="明细">
    <ItemTemplate>
    <asp:DataGrid ID="DataGrid2" runat="server" AutoGenerateColumns="True"></asp:DataGrid>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    </body>
    </HTML>
      

  3.   

    cs代码:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml; public class __a : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1;


    private void Page_Load(object sender, System.EventArgs e)
    { XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("a.xml"));
    XmlNodeList ns = doc.SelectNodes("//Detail/Flight");
    DataTable table = new DataTable("ParentTable");
    DataColumn column;
    DataRow row; column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    table.Columns.Add(column);
     
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "Flight";
    column.AutoIncrement = false;
    column.Caption = "Flight";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column); DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns;
     
    for (int i = 0; i <ns.Count; i++)
    {
    row = table.NewRow();
    row["id"] = i;
    row["Flight"] = ns[i].InnerText;
    table.Rows.Add(row);
    } DataGrid1.DataSource=table;
    DataGrid1.DataBind();
    } private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {

    if(e.Item.ItemType ==  ListItemType.AlternatingItem || e.Item.ItemType ==  ListItemType.Item)
    {
    System.Data.DataRowView drv =(System.Data.DataRowView)e.Item.DataItem; string fs = drv.Row["Flight"].ToString(); XmlDocument doc = new XmlDocument();
    doc.Load(Server.MapPath("a.xml")); XmlNodeList ns = doc.SelectNodes("//Detail[Flight='" + fs + "']/Class");
    DataTable table = new DataTable("ChildTable");
    DataColumn column;
    DataRow row;
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "ClassCode";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "Code";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "Num";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "Price";
    table.Columns.Add(column); 
    for (int i = 0; i <ns.Count; i++)
    {
    row = table.NewRow();

    row["ClassCode"] = ns[i].ChildNodes[0].InnerText;
    row["Code"] = ns[i].ChildNodes[1].InnerText;
    row["Num"] = ns[i].ChildNodes[2].InnerText;
    row["Price"] = ns[i].ChildNodes[3].InnerText;
    table.Rows.Add(row);
    } DataGrid dg = (DataGrid)e.Item.FindControl("DataGrid2");
    dg.DataSource=table;
    dg.DataBind();
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    InitializeComponent();
    base.OnInit(e);
    }
    private void InitializeComponent()
    {    
    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion

    }
      

  4.   

    直接拷贝就能运行,a.xml 为你的节点内容。
    (只是例子,没有做优化)