2012-01-28 8 views
0

У меня есть 30 + больших файлов XML размером 20-30 kb, из которых некоторая информация должна отображаться в DataGrid как один источник данных. Как я могу сделать файл привязки 1 (или 2 или 3 файла) в 1 строку DataGrid?Связывание многих XML-файлов с строками Datagrid

Например, эта часть XML-файла:

<NameId>4366527</NameId> 
<TargetType>2</TargetType> 
<TargetCost>21</TargetCost> 
<Tag>11</Tag> 
<SupplyingRate>100</SupplyingRate> 
<SupplyType>0</SupplyType> 
<Transparency>0</Transparency> 
<Passability>100</Passability> 
<HumanPassability>100</HumanPassability> 

И эта часть другого файла:

<NameId>6591314</NameId> 
<TargetType>2</TargetType> 
<TargetCost>26</TargetCost> 
<Tag>11</Tag> 
<SupplyingRate>100</SupplyingRate> 
<SupplyType>0</SupplyType> 
<Transparency>0</Transparency> 
<Passability>100</Passability> 
<HumanPassability>100</HumanPassability> 

должны быть отображены в одном Datagrid:

<dg:DataGrid Grid.Row="1" ItemsSource="{Binding Source={StaticResource Orders}}" 
     AutoGenerateColumns="True" RowEditEnding="DataGrid_RowEditEnding"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTextColumn Header="NameId" /> 
     <dg:DataGridTextColumn Header="TargetType" /> 
     <dg:DataGridTextColumn Header="TargetCost" /> 
     <dg:DataGridTextColumn Header="Tag" /> 
     <dg:DataGridTextColumn Header="SupplyingRate" /> 
     <dg:DataGridTextColumn Header="SupplyType" /> 
     <dg:DataGridTextColumn Header="Transparency" /> 
     <dg:DataGridTextColumn Header="Passability" /> 
     <dg:DataGridTextColumn Header="HumanPassability" /> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

Я думаю, что вы просите несколько неясно. Что именно вы связываете с 1 строкой 'DataGrid'? Если вы имеете в виду, что хотите, чтобы все файлы отображались как один источник, вам необходимо выяснить, как должно выглядеть это сопоставление. – mydogisbox

+0

Вы правы. Я изменил исходный вопрос, надеюсь, теперь он станет более ясным. – user1175338

+0

Я не очень много работаю с xml, но похоже, что вам нужно объединить свои файлы в одну структуру, прежде чем связывать их. – mydogisbox

ответ

0

первое, что вам нужно сделать, это создать класс для хранения XML-данных, например:

public class MyData 
{ 
    public int NameId { get; set; } 
    public int TargetType { get; set; } 
    public int TargetCost { get; set; } 
    public int Tag { get; set; } 
    public int SupplyingRate { get; set; } 
    public int SupplyType { get; set; } 
    public int Transparency { get; set; } 
    public int Passability { get; set; } 
    public int HumanPassability { get; set; } 
} 

Затем вам нужно создать ViewModel для DataGrid, например:

public ObservableCollection<MyData> MyList { get; set; } 

public ViewModel() 
{ 
    MyList = new ObservableCollection<MyData>(); 

    MyData data = new MyData() 
    { 
     NameId = 4366527, 
     TargetType = 2, 
     TargetCost = 21, 
     Tag = 11, 
     SupplyingRate = 100, 
     SupplyType = 0, 
     Transparency = 0, 
     Passability = 100, 
     HumanPassability = 100 
    }; 
    MyList.Add(data); 

    data = new MyData() 
    { 
     NameId = 6591314, 
     TargetType = 2, 
     TargetCost = 26, 
     Tag = 11, 
     SupplyingRate = 100, 
     SupplyType = 0, 
     Transparency = 0, 
     Passability = 100, 
     HumanPassability = 100 
    }; 
    MyList.Add(data); 
} 

MyList представляет собой набор, который содержит все данные, которые вы читаете из ваших XMLs. Очевидно, что в этом примере я заполняю его образцами данных. Вы должны предоставить код для его заполнения.

После этого вам необходимо создать свой DataGrid. Я положил его в Windows и код:

<Window x:Class="Temp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     xmlns:local="clr-namespace:Temp"> 
    <Window.DataContext> 
     <local:ViewModel /> 
    </Window.DataContext> 
    <Grid> 
     <DataGrid ItemsSource="{Binding Path=MyList}" 
        AutoGenerateColumns="True"> 
     </DataGrid> 
    </Grid> 
</Window>