2015-06-10 2 views
0

Я хочу создать простой вид главной детали в datagrid.
Я попытался связать DataGirdComboBoxColumn с DataSet, но это не сработает.Связывание DataGirdComboBoxColumn с DataSet не работает

Вот мой XAML код:

<DataGrid x:Name="DataGrid1" Grid.Column="0" Grid.Row="0" AlternatingRowBackground="#FFF0F0F0" ItemsSource="{Binding}" Height="420" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding AirplaneID}" IsReadOnly="True" MinWidth="30"/> 
     <DataGridTextColumn Header="Model" Binding="{Binding Model}" IsReadOnly="True" Width="Auto" MinWidth="160"/> 
     <DataGridTextColumn Header="Fuel" Binding="{Binding Fuel}" MinWidth="50" /> 

     <DataGridComboBoxColumn x:Name="ComboBoxColumnPass" Header="Passenger" DisplayMemberPath="Name" 
             SelectedValueBinding="{Binding AirplaneID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="AirplaneID"/> 
    </DataGrid.Columns> 
    <DataGrid.ContextMenu> 
     <ContextMenu> 
      <MenuItem Command="ApplicationCommands.New" ToolTip="Fügt eine neue Zeile hinzu"/> 
      <MenuItem Command="ApplicationCommands.Delete" ToolTip="Löscht das ausgewählte Element"/> 
     </ContextMenu> 
    </DataGrid.ContextMenu> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Margin="5"> 
       <TextBlock FontSize="12" TextWrapping="Wrap" Text="{Binding Detail}" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

А вот мой C# код:

namespace WpfApplicationAirplaneDB 
{ 
    AirplaneDBDataSet AirplaneDataSet = new AirplaneDBDataSet(); 
    AirplaneDBDataSetTableAdapters.AirplaneTableAdapter AirTableAdapter = new AirplaneDBDataSetTableAdapters.AirplaneTableAdapter(); 
    AirplaneDBDataSetTableAdapters.PassengerTableAdapter PassTableAdapter = new AirplaneDBDataSetTableAdapters.PassengerTableAdapter(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     AirTableAdapter.Fill(AirplaneDataSet.Airplane); 
     PassTableAdapter.Fill(AirplaneDataSet.Passenger); 

     DataGrid1.ItemsSource = AirplaneDataSet.Airplane.DefaultView; 
     ComboBoxColumnPass.ItemsSource = AirplaneDataSet.Passenger.DefaultView; 

    } 
} 

И это ошибка:

An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll Additional information: TwoWay- oder OneWayToSource-Bindungen funktionieren nicht mit der schreibgeschützten Eigenschaft "AirplaneID" vom Typ "System.Data.DataRowView".

(извините за исключением немецкого языка)

ответ

0

Кажется, как AirplaneID только для чтения. Либо сделайте его доступным для записи, либо измените привязку к OneWay.

+0

ok. если я изменил привязку к TwoWay, данные будут показаны, но я не могу открыть DataGirdComboBoxColumn. Вы знаете, как изменить свойство readonly или где я могу его найти? – IronKalli

+0

@IronKalli Взгляните на свой самолет-самолетDBDataSet. Он включает в себя имущество Самолет. Я предполагаю, что тип самолета может быть классом под названием «Самолет» (или аналогичным). Он должен содержать AirplaneID. –

+0

ah ok Я получил его. Но теперь появляется следующая проблема. Теперь все элементы таблицы Passenger отображаются в DataGirdComboBoxColumn, но я хочу отображать только те, где Airplane.AirplaneID = Passenger.AirplaneID – IronKalli

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