Linq Datagrid เชื่อมโยงจากไฟล์ xml

ฉันกำลังพัฒนาแอปพลิเคชันใน wpf ซึ่งฉันมีหนึ่ง datagrid ฉันต้องการให้เพิ่มคอลัมน์ของ DataGrid แบบไดนามิกจาก 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 นี้ ฉันต้องการให้ DataGrid แสดงเป็น:

ชื่อแผนก ความจุทั้งหมด c1 c2 c3

 D1                  5      3 2  -  

 D2                 10      5 -  5

person saloni    schedule 26.07.2011    source แหล่งที่มา


คำตอบ (1)


ฉันอยากรู้อยากเห็น และไม่เคยทำสิ่งที่คุณพยายามทำมาก่อน เลยคิดว่าจะลองเสี่ยงดู เมื่ออ่านบทความ MSDN นี้ ในหัวข้อนี้ ฉันจึงคิดขึ้นมาว่า นี้:

<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 ของคุณเป็นรูปแบบเรียบๆ) หวังว่านี่จะทำให้คุณไปถูกเส้นทาง

person Mark Carpenter    schedule 29.07.2011
comment
ใช่จริง...คอลัมน์จะต้องมีไดนามิก ดังนั้นจึงอาจมีคลาส c4, c5 และอื่นๆ จากคลาสที่เพิ่มในแต่ละแผนก ฉันต้องการให้แสดงเป็นคอลัมน์โดยมีความสามารถเป็นค่าเซลล์สำหรับแผนกที่เกี่ยวข้อง - person saloni; 29.07.2011