我在WPF中有一个DataGrid,我想用XML文件的结果填充,但我不确定如何这样做。
我已设法使用各种元素属性填充列,但我希望为每个属性分别使用分配给XML文件中的元素的列。
我的XML格式如下:
<?xml version="1.0"?>
-<Roles User="Mr 1">
<Role Info="Information 1" Name="Role1"> </Role>
<Role Info="Information 2" Name="Role2"> </Role>
</Roles>
依此类推......对于各种用户,每个用户都分配了角色。
我的VB.Net代码如下:
Private Sub DataGridTest_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim xDoc = XDocument.Load("\Roles.xml")
Dim xRoles = xDoc...<Role>
MyDataGrid.DataContext = xRoles
End Sub
我的XAML如下:
<Grid Style="{StaticResource ContentRoot}">
<DataGrid Name="MyDataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" HorizontalAlignment="Stretch" Height="500" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=@Name}" Header="Role" />
<DataGridTextColumn Binding="{Binding XPath=@Info }" Header="Information" />
</DataGrid.Columns>
</DataGrid>
</Grid>
虽然这个DOES填充了DataGrid,但它似乎用与xRole相关的所有属性填充它。我可以理解这种情况正在发生,但我无法弄清楚如何获得我正在寻找的结果,即:'Info'和'Name'作为标题,属性值作为单元格在他们自己的列中。< / p>
我尝试使用属性值填充列表,手动创建列,然后将列表绑定到列 - 这可能是正确的方法吗? - 但我只能想出如何将1个列表绑定到其中一个列。是否可以拥有2个单独的列表并将它们单独绑定到自己的列中?
我意识到我可能会在这里提出两个不同的问题 - 道歉。我发现特定问题的信息很少 - 尤其是与VB.Net有关的信息
提前致谢!
答案 0 :(得分:1)
根据MSDN
当源是XML数据时,DataGrid无法自动生成列
您需要手动创建列
<DataGrid Name="MyDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Path=Elements[Role]}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Attribute[Name].Value}" Header="Name" />
<DataGridTextColumn Binding="{Binding Path=Attribute[Info].Value}" Header="Info"/>
</DataGrid.Columns>
</DataGrid>
并在代码中
MyDataGrid.DataContext = xDoc.Root
答案 1 :(得分:0)
您可能已经尝试过这个但是可以使用DataSet.ReadXml(filename)。
public DataSet getData()
{
DataSet ds;
// Create an XmlReader
using (XmlReader reader = XmlReader.Create(new StringReader(results)))
{
ds.ReadXml(reader);
}
return ds;
}
我在这里使用了一个阅读器,但直接从xml文件中读取时同样适用。拥有DataSet后,您可以像这样查看表格......
DataTable testDataTable1 = ds.Tables[0];
DataTable testDataTable2 = ds.Tables[1];
您可以遍历它们以构建更自定义的数据表。希望这能以某种方式帮助你!