如何从多 table 数据集加载 ASP.Net 网格

How to load ASP.Net Grid from a multi table Dataset

我是 ASP.Net 的新手,我想在 ASP.Net 网格中阅读以下 XML。 当我将 xml 加载到 DataSet 并使用以下代码时,它只显示 XML.

中的第一个 table
DataSet DS = new DataSet();        
DS.ReadXml(Server.MapPath(".\data\demo_portfolio.xml"));        
GridView1.DataSource = DS;    
GridView1.DataBind();

XML 阅读

<portfolio>
  <script>
    <name>"HDFC.BSE"</name>
    <row>
      <PurchasePrice>2433.75</PurchasePrice>
      <PurchaseDate>2020-01-01</PurchaseDate>
      <PurchaseQty>5</PurchaseQty>
      <CommissionPaid>20</CommissionPaid>
      <CostofInvestment>12188.75</CostofInvestment>
    </row>
    <row>
      <PurchasePrice>2455.30</PurchasePrice>
      <PurchaseDate>2020-01-20</PurchaseDate>
      <PurchaseQty>4</PurchaseQty>
      <CommissionPaid>30</CommissionPaid>
      <CostofInvestment>9851.20</CostofInvestment>
    </row>
    <row>
      <PurchasePrice>1874.90</PurchasePrice>
      <PurchaseDate>2020-03-12</PurchaseDate>
      <PurchaseQty>6</PurchaseQty>
      <CommissionPaid>30</CommissionPaid>
      <CostofInvestment>11279.40</CostofInvestment>
    </row>
  </script>
</portfolio>

您可以使用自定义 xml linq 解析器来填充数据表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using System.Data;

namespace ConsoleApplication4
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("PurchasePrice", typeof(decimal));
            dt.Columns.Add("PurchaseDate", typeof(DateTime));
            dt.Columns.Add("PurchaseQty", typeof(int));
            dt.Columns.Add("CommissionPaid", typeof(int));
            dt.Columns.Add("CostofInvestment", typeof(decimal));

            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement script in doc.Descendants("script"))
            {
                string name = (string)script.Element("name");
                foreach (XElement row in script.Elements("row"))
                {
                    dt.Rows.Add(new object[] {
                        name,
                        (decimal)row.Element("PurchasePrice"),
                        (DateTime)row.Element("PurchaseDate"),
                        (int)row.Element("PurchaseQty"),
                        (int)row.Element("CommissionPaid"),
                        (decimal)row.Element("CostofInvestment")
                    });
                }
            }
 
        }
    }
}