c# - 如何在C#中使用Datagridview显示XML数据

标签 c# xml winforms datagridview

我无法在我的 c# WinForm 上显示 XML。

我的 XML 文件如下所示:

<HotelDatabase>
    <Hotel Name="ABC" Location="XYZ">
        <Room Type="Single" Count="5" Price="2000" />
        <Room Type="Superior" Count="3" Price="4000" />
    </Hotel>
    <Hotel Name="DEF" Location="LMN">
        <Room Type="Single" Count="5" Price="2000" />
        <Room Type="Superior" Count="3" Price="4000" />
    </Hotel>
</HotelDatabase>

我在 DataGridView 中显示数据的代码如下所示:

var dataSet = new DataSet();
dataSet.ReadXml(Properties.Settings.Default.HotelDB);
dataGridViewHotelList.DataSource = dataSet.Tables[0];

当我运行这段代码时,只显示名称和位置。我希望 Hotel 元素及其子元素中的所有属性都显示在数据 GridView 中。

最佳答案

您正在正确地将 XML 数据加载到网格,但是您应该知道,当您将 DataGridView 绑定(bind)到 DataTable 时,它显示的是数据表的列而不是相关表的列.
您不能在单个 DataGridView 中显示关系。要显示酒店的子项目,您可以使用相同形式的另一个 DataGridView 来显示酒店的子项目并将第二个网格绑定(bind)到酒店的房间:

var ds = new DataSet();
ds.ReadXml("path to xml file");
dataGridView1.DataSource = ds.Tables["Hotel"]; //Tables[0]
dataGridView2.DataSource = ds.Tables["Hotel"]; //Tables[0]
dataGridView2.DataMember = "Hotel_Room"; //ds.Tables[0].ChildRelations[0].RelationName;

这样您的数据网格之间就会有主从关系。单击每一行酒店,您将看到它的房间。

你还有一些其他的选择,例如:

  • 您可以为网格创建一个 DataGridViewButtonColumn,以打开一个显示包含所选酒店房间的网格的表单。
  • 您可以使用 DataGrid 控件,它可以显示指向一行子项的链接。为此,将酒店设置为数据网格控件的数据源就足够了:this.dataGrid1.DataSource = ds.Tables["Hotel"];

关于c# - 如何在C#中使用Datagridview显示XML数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632179/

相关文章:

c# - 将数据库永久添加到应用程序 C#

c# - MySQL 更新数据网格中的整列

c# - XElement.Elements().Select() 原因 尝试显式指定类型参数

objective-c - 从 XML 文件构建 iOS 应用程序

c# - 在 Linux 上开发 C#

c# - 具有可拖动数据点的 .net 图形库

c# - 选择问题中用户的所有标签 asp.net c# EF

java - 使用 JAXB 解码 XML 时跳过 XML 节点

xml - 在 XSLT 中比较 CSV

c# - 如何更新由另一个组合框触发的组合框中的值?