在asp.net的GridView列中显示子XML元素
本文关键字:显示 XML 元素 asp net GridView | 更新日期: 2023-09-27 18:24:27
我有如下结构的XML文档。
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<productID></productID>
<productName></productName>
<productDesc></productDesc>
<productFeatures>
<Feature></Feature>
<Feature></Feature>
<Feature></Feature>
</productFeatures>
</product>
<product>
<productID></productID>
<productName></productName>
<productDesc></productDesc>
<productFeatures>
<Feature></Feature>
<Feature></Feature>
<Feature></Feature>
<Feature></Feature>
<Feature></Feature>
<Feature></Feature>
</productFeatures>
</product>
</products>
我成功地在GridView中显示了产品元素,但我仍在寻找一种显示其中内部元素的方法如下所示。
var bind = productsDoc.Descendants("products").Select(product => new
{
productID = product.Element("productID").Value,
productName = product.Element("productName").Value,
productDesc = product.Element("productDesc").Value,
productAllFeatures = product.Element("productFeatures").Element("Feature").Value,
}).OrderBy(product => product.productName).ToList();
producsGrdView.DataSource = bind;
producsGrdView.DataBind();
现在,通过注意xml文件,我们可以看到多个"Feature"元素属于同一个产品,其关系是(多对一)。
此外,在上面的代码中,productAllFeatures只显示第一个"Feature"。
我的问题是:
如何将多对一关系中的数据、属于一个产品的多个功能加载到同一个GridView中?
如何将产品GrdView中的所有功能显示为一个网格列?
有简单的方法吗?
第一步是将productAllFeatures
转换为某种类型的列表,比如字符串:
var bind = productsDoc.Descendants("products").Select(product => new
{
...
productAllFeatures = product.Element("productFeatures")
.Descendants("Feature")
.Select(x => x.Value)
.ToList()
}).OrderBy(product => product.productName).ToList();
现在在网格视图中,您可能希望使用内部中继器来绑定此列表并显示它:
<Columns>
...
<TemplateField HeaderText="Features">
<ItemTemplate>
<asp:Repeater runat="server" DataSource='<%# Eval("productAllFeatures") %>'>
<ItemTemplate>
<%# Container.DataItem.ToString() %>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</TemplateField>
不过我没有测试它,所以一些小错误可能潜伏在