1

正如我的问题所述,

我有一个输出如下的 XML 文件:

<cme Type="Object" Class="cme">
<sId Type="String">1</sId>
<conc Type="Double">18,6511073619</conc>
  </cme>
<cme Type="Object" Class="cme">
<sId Type="String">2</sId>
<conc Type="Double">18,3226889524</conc>
</cme>
<cme Type="Object" Class="cme">
<sId Type="String">3</sId>
<conc Type="Double">4,7920021996</conc>
</cme>....

我在 Visual Studio 中创建了一个新表单,并添加了以下代码:

        cmDataSet.ReadXml(filePath,XmlReadMode.InferSchema);
        cmDataGrid.DataSource = cmDataSet;
        cmDataGrid.AutoGenerateColumns = true;
        cmDataGrid.DataMember = "cme"; <-- Parent Node

但是当显示表单时,当行数与计数匹配时,单元格将填充属性值,而不是实际值,以这种方式:

Object  cme
Object  cme
Object  cme
Object  cme

如何跳过评估属性以仅显示实际值?

4

1 回答 1

1

我相信您需要为您的 xml 文件创建 xsd 架构。并添加cmDataSet.ReadXmlSchema对代码的调用:

cmDataSet.ReadXmlSchema(xsdFilePath);
cmDataSet.ReadXml(filePath, XmlReadMode.InferSchema);
cmDataGrid.DataSource = cmDataSet;
cmDataGrid.AutoGenerateColumns = false;
cmDataGrid.DataMember = "cme"; <-- Parent Node

您需要模式,因为当前数据集将包含 3 个数据表cmesIdconc. 这不是你要找的。

实际上,如果 xml 文件没有架构,则它与使用“尖括号分隔的文本”一样好且易于使用。

另一种方法是使用 LINQ to XML 并构造匿名对象(或创建强类型对象并映射到它)来表示您的数据网格行:

var doc = XDocument.Load(filePath);
var rows = doc.Root.Elements("cme")
.Select(e => new
{
    cId = e.Element("sId").Value,
    conc = e.Element("conc").Value
});

cmDataGrid.DataSource = rows.ToList();
cmDataGrid.AutoGenerateColumns = true;

使用 LINQ 投影是显示数据的一种快速简便的方法,但在实施“添加/更新/编辑行”方案期间可能会浪费大量时间。

于 2013-04-22T22:04:38.043 回答