我无法在我的 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/