【问题标题】:Linq Datagrid binding from xml file来自 xml 文件的 Linq Datagrid 绑定
【发布时间】:2011-07-26 04:01:31
【问题描述】:

我正在 wpf 中开发一个应用程序,其中我有一个数据网格。我希望从 xml 动态添加数据网格的列。

<Department Name='D1' TotalCapacity='5'>
  <Class Name='c1' Capacity='3'></Class>
  <Class Name='c2' Capacity='2'></Class>
</Department>

<Department Name='D2' TotalCapacity='10'>
  <Class Name='c1' Capacity='5'></Class>
  <Class Name='c3' Capacity='5'></Class>
</Department>

现在,基于这个 xml,我希望数据网格显示为:

部门名称 TotalCapacity c1 c2 c3

 D1                  5      3 2  -  

 D2                 10      5 -  5

【问题讨论】:

    标签: wpf xml linq datagrid


    【解决方案1】:

    我很好奇,以前没有做过你想做的事,所以我想我会试一试。通过这个this MSDN article 的主题,我想出了这个:

    <Grid>
        <Grid.Resources>
            <XmlDataProvider x:Key="DepartmentData" XPath="Departments/Department">
                <x:XData>
                    <Departments xmlns="">
                        <Department Name='D1' TotalCapacity='5'>
                            <Class Name='c1' Capacity='3'/>
                            <Class Name='c2' Capacity='2'/>
                        </Department>
                        <Department Name='D2' TotalCapacity='10'>
                            <Class Name='c1' Capacity='5'/>
                            <Class Name='c3' Capacity='5'/>
                        </Department>
                    </Departments>
                </x:XData>
            </XmlDataProvider>
        </Grid.Resources>
        <DataGrid ItemsSource="{Binding Source={StaticResource DepartmentData}}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Department Name" Binding="{Binding XPath=@Name}"/>
                <DataGridTextColumn Header="Total Capacity" Binding="{Binding XPath=@TotalCapacity}"/>
                <DataGridTextColumn Header="c1">
                    <DataGridTextColumn.Binding>
                        <Binding XPath="Class[@Name='c1']/@Capacity"/>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
                <DataGridTextColumn Header="c2">
                    <DataGridTextColumn.Binding>
                        <Binding XPath="Class[@Name='c2']/@Capacity"/>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
                <DataGridTextColumn Header="c3">
                    <DataGridTextColumn.Binding>
                        <Binding XPath="Class[@Name='c3']/@Capacity"/>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
    

    结果:

    祝你好运!

    编辑:

    我刚刚意识到您要求动态添加列 - 我不确定是否有一种直接的方法可以做到这一点,因为您的 XML 的结构格式不适合开箱即用的表格显示(我不得不使用一些 XPath 魔法将您的 XML 转换为平面格式)。不过,希望这能让您走上正确的道路。

    【讨论】:

    • 是的,真的...列需要是动态的,因为可能有 c4、c5 等类。根据添加到各个部门的类,我希望它们显示为列,容量为各个部门的单元格值
    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多