You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C# Visual Studio中基于复杂XML Schema解析XML并实现DataGridView关联展示

科技树XML数据在WinForm DataGridView中的嵌套展示问题

我正在用Visual Studio和C#开发一款面向玩家/开发者的科技树设计工具。科技树的结构定义(Schema)存储在XML文件中,是包含多层嵌套的复杂结构。我的需求是读取这个Schema,将另一份科技树数据XML文件加载到Windows Form界面,通过DataGridView控件实现数据的展示(最好支持编辑)。

我的初始设计思路是:加载Schema后遍历元素生成界面——左侧用主DataGridView展示TechInfo节点的大部分字段;右侧面板为带有子元素的项单独创建小型DataGridView,用来展示选中行对应的子节点数据(比如Flavor偏好、Or前置科技、And前置科技)。

我手动创建了3个子DataGridView,先尝试了以下代码加载数据:

private void frmDesigner_Load(object sender, EventArgs e)
{
    dsMainTech.ReadXml("CIV4TechInfos.xml");

    dgvTechnologies.DataSource = dsMainTech.Tables["TechInfo"];
    dgvTechnologies.AutoResizeColumns();

    dgvFlavors.DataSource = dsMainTech.Tables["TechInfo"];
    dgvFlavors.DataMember = "TechInfo_Flavors";

    dgvOrPrereqs.DataSource = dsMainTech.Tables["TechInfo"];
    dgvOrPrereqs.DataMember = "TechInfo_OrPreReqs";

    dgvAndPrereqs.DataSource = dsMainTech.Tables["TechInfo"];
    dgvAndPrereqs.DataMember = "TechInfo_AndPreReqs";
}

结果主DataGridView(dgvTechnologies)成功加载了TechInfo的数据,但右侧的三个子DataGridView都没有显示任何数据。

之后我换了一种写法:

dgvFlavors.DataSource = dsMainTech;
dgvFlavors.DataMember = "Flavor";

dgvOrPrereqs.DataSource = dsMainTech;
dgvOrPrereqs.DataMember = "OrPreReqs";

dgvAndPrereqs.DataSource = dsMainTech;
dgvAndPrereqs.DataMember = "AndPreReqs";

这次Flavor的数据虽然加载出来了,但所有行的Flavor都混在一起展示,无法只显示左侧选中行对应的子数据;而OrPreReqs和AndPreReqs的数据完全加载失败。

我需要解决的问题是:

  • 如何正确实现XML嵌套数据在DataGridView中的关联展示(主表选中一行,子表自动显示对应子数据)
  • 最终目标是能基于Schema自动生成对应的子DataGridView,而不是手动创建

注:所用的示例XML是《AdvCiv》项目中的科技树数据文件,对应的Schema文件定义了TechInfo节点及嵌套的Flavors、OrPreReqs、AndPreReqs等子节点结构。

内容的提问来源于stack exchange,提问作者TBowman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:35:24