使用 ASP.NET Grid 显示分层 xml 数据

Posted

技术标签:

【中文标题】使用 ASP.NET Grid 显示分层 xml 数据【英文标题】:Show hierarchical xml data using ASP.NET Grid 【发布时间】:2019-12-28 16:24:05 【问题描述】:

我有以下 XML 数据。我需要以分层表格格式在 ASP.NET 网页上呈现它们。

XML:

<Developers>
  <Region name="UK">
    <Region name="England">
      <Region name="London">
        <Data Date="01-01-2019">
          <Value name="DotNet">100</Value>
        </Data>
        <Data Date="01-01-2020">
          <Value name="DotNet">200</Value>
          <Value name="Java">300</Value>
        </Data>
      </Region>
      <Region name="Other">
        <Data Date="01-01-2019">
          <Value name="DotNet">400</Value>
        </Data>
        <Data Date="01-06-2019">
          <Value name="DotNet">500</Value>
        </Data>
      </Region>
    </Region>
    <Region name="Scotland">
      <Data Date="01-01-2019">
        <Value name="DotNet">600</Value>
      </Data>
    </Region>
  </Region>
  <Region name="France">
    <Data Date="01-06-2020">
      <Value name="DotNet">700</Value>
    </Data>
  </Region>
  <Region name="Germany">
    <Data Date="01-06-2019">
      <Value name="Java">800</Value>
    </Data>
  </Region>
</Developers>

预期输出:

其中 (-) 是树视图的展开/折叠控件。

是否可以使用 ASP.NET 数据网格来实现这一点?任何代码示例都会非常有用。

【问题讨论】:

XML 示例中的数字与预期输出中的数字有何关系?示例中似乎有德国和 2019 年的数据,但预期输出显示值为 0。 @MartinHonnen - 我已经更新了 XML(对不起,它有一个以前的版本)。该表仅包含 DotNet 开发人员的数据。德国没有 DotNet 开发人员(当然在这个例子中),所以它有 0。此外,这些数字是给定年份的值的总和。示例:UK\England\Other 2019 年的值为 900,即 400 + 500 的总和。 见方案一中的三个链接:codeproject.com/Questions/746712/… 感谢链接,但它们主要用于 winform 应用程序。我必须在 ASP.NET 网络表单中实现这一点。 您可能需要一些第三方库来实现类似于该图像的树视图控件,但您是否还需要帮助将该 xml 转换为可用对象? 【参考方案1】:

在asp.net网格视图中显示xml数据。

默认的asp网页

<html>
  <head>
    <title>Datagrid With XML </title>
    <link rel="stylesheet" href="css/ASPNetCookbook.css">
  </head>
  <body leftmargin="0" margin margin topmargin="0">
    <form id="frmDatagrid" method="post" runat="server">
      <table  cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td align="center">
            <img src="images/ASPNETCookbookHeading_blue.gif">
          </td>
        </tr>
        <tr>
          <td class="dividerLine">
            <img src="images/spacer.gif"  border="0"></td>
        </tr>
      </table>
      <table  align="center" border="0">
        <tr>
          <td><img src="images/spacer.gif"  border="0"></td>
        </tr>
        <tr>
          <td align="center" class="PageHeading">
             DataGrid Using Data From XML (VB)</td>
        </tr>
        <tr>
          <td><img src="images/spacer.gif"  border="0"></td>
        </tr>
        <tr>
          <td align="center">
            <asp:DataGrid 
                                id="dgRegion" 
                                runat="server" 
                                BorderColor="000080" 
                                BorderWidth="2px"
                                AutoGenerateColumns="False"
                                >

                                <HeaderStyle 
                                  HorizontalAlign="Center" 
                                  ForeColor="#FFFFFF" 
                                  BackColor="#000080" 
                                  Font-Bold=true
                                  CssClass="TableHeader" /> 

                                <ItemStyle
                                  BackColor="#FFFFE0" 
                                  cssClass="TableCellNormal" />

                                <AlternatingItemStyle 
                                  BackColor="#FFFFFF" 
                                  cssClass="TableCellAlternating" />


                                <Columns>
                                  <asp:BoundColumn HeaderText="Region" DataField="Region" />
                                  <asp:BoundColumn HeaderText="Data " DataField="Data " 
                                                   ItemStyle-HorizontalAlign="Center" />
                                  <asp:BoundColumn HeaderText="Value " DataField="Value "
                                                   ItemStyle-HorizontalAlign="Center" />
                                </Columns>
                              </asp:DataGrid>
          </td>
        </tr>
      </table>
    </form>
</body>
</html>

cs代码如下。

using System;
using System.Configuration;
using System.Data;
using System.Data.OleDb;

namespace ASPNetCookbook.CSExamples

  public class CH01DataGridWithXMLCS : System.Web.UI.Page
  

    private void Page_Load(object sender, System.EventArgs e)
    
      const String Region_TABLE = "Region";

      DataSet dSet = null;
      String xmlFilename = null;

      if (!Page.IsPostBack)
      
        try
        
          // get fully qualified path to the "Region" xml document located

                            xmlFilename = Server.MapPath("xml") + "\\Region.xml";


                            dSet = new DataSet( );
                            dSet.ReadXml(xmlFilename);

                            // bind the dataset to the datagrid
                            dgRegion.DataSource = dSet.Tables[Region_TABLE];
                           dgRegion.DataBind( );
          

        finally
        
          // cleanup
          if (dSet != null)
          
            dSet.Dispose( );
          
          // finally
      
      // Page_Load
    

【讨论】:

以上是关于使用 ASP.NET Grid 显示分层 xml 数据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC - Kendo Grid 慢分页

ASP.NET开发实战——ASP.NET MVC & 分层 代码篇

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

如何在 asp.net 中创建分层结构

ASP.NET MVC,使用可点击项实现 MVC-Grid

使用 c# --> asp.net web api 在 json 中获取分层输出