gpt4 book ai didi

c# - 带有 XML 的 DataGridView - "Merging"子记录

转载 作者:行者123 更新时间:2023-11-30 23:34:12 27 4
gpt4 key购买 nike

我有一个简单的 Windows 窗体应用程序,我在其中读取 XML 文件并在 DataGridView 中显示它的内容:

DataSet ds = new DataSet();

private void Form1_Load(object sender, EventArgs e)
{
ds.ReadXmlSchema(@"MySchema.xsd");
ds.ReadXml(@"MyXML.xml");

dataGridView1.DataSource = ds.Tables[0];
}

这会很好地加载父记录。但是,我有一个可选子记录(位于ds.Tables[1]),我想将其与dataGridView 一起加载——要么在它自己的网格中,要么只是显示在 Tables[0] 中的数据旁边。

我尝试了几种不同的方法,包括添加第二个 DataGridView:

dataGridView2.DataSource = ds.Tables[1]; - 这确实显示了数据,但没有指示它实际上属于哪个父记录。

合并记录:ds.Tables[0].Merge(ds.Tables[1]); - 这显示了我想要的数据,在特定行不显示的地方有空白包含此信息。但是,当我保存数据时,它会产生将所有内容写入 Tables[0] 的副作用,这是我不希望发生的。

我只想并排显示这些数据(模仿 Merge 操作的效果,但继续写入它们各自的行。

我目前正在使用 ds.WriteXml(@"Path@"); 写入数据。谁能指出我正确的方向?

编辑:

XML 文件的基本布局是:

<parent>
<child1 property1="" property2="">
<optionalchild property1="" property2="" />
</child1>
<child2 property1="" property2="" />
.. etc
</parent>

最佳答案

你可以像这样使用 XML Linq 来解析 xml 文件

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


namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);

var results = doc.Element("parent").Elements().Select(x => new
{
name = x.Name,
property1 = x.Attribute("property1").Value,
property2 = x.Attribute("property2").Value,
child_property1 = x.Element("optionalchild") == null ? null : x.Element("optionalchild").Attribute("property1").Value,
child_property2 = x.Element("optionalchild") == null ? null : x.Element("optionalchild").Attribute("property2").Value
}).ToList();

}
}
}

关于c# - 带有 XML 的 DataGridView - "Merging"子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com