Linq Datagrid mengikat dari file xml

Saya sedang mengembangkan aplikasi di WPF di mana saya memiliki satu datagrid. saya ingin kolom datagrid ditambahkan secara dinamis dari 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>

Sekarang, berdasarkan xml ini saya ingin datagrid ditampilkan sebagai:

Nama Departemen Kapasitas Total c1 c2 c3

 D1                  5      3 2  -  

 D2                 10      5 -  5

person saloni    schedule 26.07.2011    source sumber


Jawaban (1)


Saya penasaran, dan belum pernah melakukan apa yang Anda coba lakukan sebelumnya, jadi saya pikir saya akan mencobanya. Melalui artikel MSDN ini tentang subjek ini, saya menemukan ini:

<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>

Hasil:

Hasilnya

Semoga beruntung!

Sunting:

Saya baru menyadari Anda meminta kolom untuk ditambahkan secara dinamis - Saya tidak yakin ada cara mudah untuk melakukan itu, mengingat XML Anda tidak terstruktur dalam format yang cocok untuk tampilan tabel di luar kotak (saya punya untuk menggunakan keajaiban XPath untuk mengubah XML Anda ke format datar). Semoga ini akan membawa Anda ke jalan yang benar.

person Mark Carpenter    schedule 29.07.2011
comment
ya benar...kolomnya harus dinamis jadi mungkin ada kelas c4, c5 dan seterusnya. Berdasarkan kelas yang ditambahkan ke masing-masing departemen, saya ingin kelas tersebut ditampilkan sebagai kolom dengan kapasitas sebagai nilai sel untuk masing-masing departemen - person saloni; 29.07.2011