2016-09-09 2 views
0

Я пытаюсь загрузить ряд строк в DataGrid, которые содержат внешние ключи для других таблиц. В этом конкретном случае строки имеют TransactionTypeID (внешний ключ к таблице TransactionTypes), что я хотел бы, чтобы мой ComboBox (ItemsSource был типа DataView из таблицы транзакций) отображался правильно и разрешил модификацию.Загрузите строки DataGrid с помощью внешних ключей с помощью ComboBox

<DataGridTemplateColumn Header="Transaction Types"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="Need ComboBox SelectedText here!"></TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding DataContext.TransactionTypes, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
       DisplayMemberPath="Description" 
       SelectedValuePath="ID" 
       SelectedItem="{Binding TransactionTypeID}"></ComboBox> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

ComboBox SelectedItem, кажется, не работает, и я невежественный о том, как заполнить текст TextBlock.

+0

Можете ли вы описать, что речь идет о ComboBox SelectedItem, что, кажется, не работает? –

+0

@EdPlunkett У ComboBox нет выбора. – AnthonyOSX

+0

Вы выбираете элемент из списка, а поле со списком остается пустым? –

ответ

0

Я понимаю, что вы хотите установить значение столбца и отобразить описание типа транзакции на основе конкретного выбора в раскрывающемся списке. Этот пример показывает привязку текста в текстовом блоке после выбора значения из раскрывающегося списка в шаблоне редактирования.

XAML:

<Grid DataContext="{x:Static local:dc.Instance}"> 
    <Grid.Resources> 
     <DataTemplate x:Key="DisplayTemplate" > 
      <TextBlock Text="{Binding TransactionType.Description}"></TextBlock> 
     </DataTemplate> 
     <DataTemplate x:Key="EditTemplate"> 
      <ComboBox ItemsSource="{x:Static local:dc.TransactionTypes}" 
       DisplayMemberPath="Description" 
       SelectedItem="{Binding TransactionType}"> 
      </ComboBox> 
     </DataTemplate> 
    </Grid.Resources> 
    <DataGrid Name="DG1" ItemsSource="{Binding Path=DGItems}" AutoGenerateColumns="False" > 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Transaction Type" 
            CellTemplate="{StaticResource DisplayTemplate}" 
            CellEditingTemplate="{StaticResource EditTemplate}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

данных класса контекст:

public class dc 
{ 
    private static readonly dc _dc = new dc(); 
    public static dc Instance { get { return _dc; } } 


    public class TransactionTypeItem 
    { 
     public int ID { get; set; } 
     public string Description { get; set; } 
    } 

    public static List<TransactionTypeItem> TransactionTypes 
    { 
     get 
     { 
      return new List<TransactionTypeItem>() { new TransactionTypeItem() { ID = 0, Description = "Zero" }, 
                new TransactionTypeItem() { ID = 1, Description = "One" }, 
                new TransactionTypeItem() { ID = 2, Description = "Two" } }; 
     } 
    } 

    public class DataItem 
    { 
     public TransactionTypeItem TransactionType { get; set; } 
     public string OtherData { get; set; } 
    } 


    private List<DataItem> _items; 

    public List<DataItem> DGItems 
    { 
     get 
     { 
      return _items; 
     } 
    } 




    private dc() 
    { 
     _items = new List<DataItem>() 
     { 
      new DataItem() { OtherData = "Test0", TransactionType = TransactionTypes[0] }, 
      new DataItem() { OtherData = "Test1", TransactionType = TransactionTypes[1] }, 
      new DataItem() { OtherData = "Test2", TransactionType = TransactionTypes[2] }, 
     }; 
    } 

} 
+0

Проблема только в том, что я хотел бы использовать DataView в качестве элемента ItemsSource DataGrid. – AnthonyOSX

+0

Это должно быть достаточно простым, измените Path Item Item, чтобы указать на реальный DataView. – leetibbett

Смежные вопросы