Как отобразить определенный столбец из отдельной таблицы в WPF DataGrid? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть две таблицы, давайте назовем их T и V.

Таблица T содержит все данные, необходимые для отображения в сетке данных, а таблица V содержит данные об определенном столбце в таблице T. Итак, таблица Tсодержит внешний ключ из таблицы V.

Я хочу отобразить текстовый столбец из таблицы V согласно ключу в таблице T.

Используя

myDataGrid.ItemSource = List<T> myTableTList 

и

<DataGrid Grid.Row="0" 
    Name="datesDG" 
    Margin="5, 5, 5, 5"  
    SelectionMode="Extended" 
    IsReadOnly="True" 
    AutoGenerateColumns="False" 
    ItemsSource="{Binding dates, Mode=TwoWay}">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Key Column" Binding="{Binding Path=DateKey}" />
        <DataGridTextColumn Header="Publish Date" Binding="{Binding Path=publishDate, StringFormat=\{0:dd.MM.yyyy\}}" />
        <DataGridTextColumn Header="Editing Date" Binding="{Binding Path=editingDate, StringFormat=\{0:dd.MM.yyyy\}}"/>
        <DataGridTextColumn Header="Data Status" Binding="{Binding Path=dataStatusKey}"/>
    </DataGrid.Columns>

</DataGrid>

Таким образом, dataStatusKey является внешним ключом из таблицы V, но я хочу отобразить текстовое поле из таблицы V, которое соответствует dataStatusKey.

Как я могу это сделать, если я заполню свойDataGrid с данными типа T?

Должен ли я создать отдельный класс, заполнить его соответствующими полями, составить список и затем установить ItemSource моей сетки в этот новый список типов данных?

1 Ответ

0 голосов
/ 09 октября 2018

Должен ли я создать отдельный класс, заполнить его соответствующими полями, составить список и затем установить ItemSource моей сетки в этот новый список типов данных?

Да.В основном вы должны сделать это:

  • Создать новый класс X со свойством для каждого столбца, который вы хотите отобразить в DataGrid
  • Заполните его данными, полученными из вашегоT и V объекты в вашей модели представления
  • Свяжите свойство ItemsSource со свойством IEnumerable<X> модели представления

Обратите внимание, что если T имеетсвойство навигации, вы можете привязать непосредственно к этому:

<DataGridTextColumn Header="Text" Binding="{Binding Path=V.Text}"/>
...