【问题标题】:How to load ASP.Net Grid from a multi table Dataset如何从多表数据集中加载 ASP.Net Grid
【发布时间】:2020-10-13 09:38:27
【问题描述】:

我是 ASP.Net 的新手,我想将以下 XML 读入 ASP.Net Grid。 当我将 xml 加载到 DataSet 并使用以下代码时,它只显示 XML 中的第一个表。

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>

【问题讨论】:

  • 我的预期输出在网格中如下(每行重复名称):名称|PurchasePrice|PurchaseDate|PurchaseQty|CommisionPaid|CostofInvestment
  • Gridview 是一个二维对象,只会显示一个表格。您可能需要为每个表使用单独的 GridView,或者需要通过一个公共键连接多个表。
  • DataSet ReadXml 仅限于 4 级后代。在 4 个级别之后,DS 被分割成无法使用或组合的表。一旦超过 4 个级别,您应该使用其他 Xml 解析方法将数据放入 2 维对象,然后再放入 GridView。
  • 让我重新表述我的问题...如何在单个网格中显示 XML 上方?如果是的话,如果有人可以帮助我使用代码 sn-p,将不胜感激。 ASP.Net GridView 也可以允许选择行吗?我不必使用DataSet,还有其他选择吗?
  • 只绑定到表“行”:DataSet ds = new DataSet(); ds.ReadXml(文件名);数据表 dt = ds.Tables["row"];

标签: c# asp.net xml gridview dataset


【解决方案1】:

您可以使用自定义 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")
                    });
                }
            }
 
        }
    }
}

【讨论】:

  • 谢谢@jdweng,这是完美的解决方案。
猜你喜欢
  • 2012-08-20
  • 2011-03-10
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2015-02-03
  • 2021-02-10
相关资源
最近更新 更多