none
DataGrid in DataGrid + Binding + Filter RRS feed

  • Frage

  • Hallo,

     

    ich bastel gerade ein wenig mit dem ADO.NET Entity Framework herum und habe ein Problem.

    Ich habe ein DataGrid das seine Daten aus einer Tabelle bekommt. Nun habe ich in dem DataGrid eine Column in der noch ein DataGrid ist. In diesem DataGrid sollen Kontaktzeilen angezeigt werden. Ich muss also in der "DataGridColumn" an eine Datenquelle andocken, in dem Fall eine andere Tabelle, und diese Tabelle auf die ID des "oberen" Datensatzes filtern. Quasi über Fremdschlüssel. Bisher habe ich folgendes:

     

            xmlns:Dispositionsplan_ViewModel="clr-namespace:Dispositionsplan.ViewModel"
      
      <Window.DataContext>
            <Dispositionsplan_ViewModel:Vm />
        </Window.DataContext>
        <Window.Resources>
            <src:Vm x:Key="StaticViewModel" />
        </Window.Resources>
    
    
        <Grid DataContext="{Binding}">
            <DataGrid x:Name="Fahrzeugliste"
                      Margin="8,8,8,210.562"
                      AutoGenerateColumns="False"
                      EnableColumnVirtualization="True"
                      IsReadOnly="false"
                      IsSynchronizedWithCurrentItem="False"
                      ItemsSource="{Binding MyThings}"
                      SelectedItem="{Binding SelectedFahrzeug,
                                             Mode=TwoWay,
                                             UpdateSourceTrigger=PropertyChanged}"
                      SelectionMode="Single">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding ID}" Header="ID" />
                    <DataGridTextColumn Binding="{Binding Kennzeichen}" Header="Kennzeichen" />
                    <DataGridTemplateColumn Width="SizeToCells"
                                            Header="Übersicht"
                                            IsReadOnly="True">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Grid>
                                    <DataGrid ItemsSource="{Binding DispoplanContext.Fahrzeugkontakt,
                                                                    Source={StaticResource StaticViewModel}}"
                                              SelectedValue="{Binding ID,
                                                                      Mode=OneWay}"
                                              SelectedValuePath="Fahrzeug_ID" />
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
    
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    
    

        public class Vm : INotifyPropertyChanged
        {
            private DispoplanEntities _dispoplanDataBase;
            public  DispoplanEntities DispoplanContext
            {
                get
                {
                    return _dispoplanDataBase;
                }
                set
                {
                    _dispoplanDataBase = value;
                    OnPropertyChanged("DispoplanDataBase");
                }
            } 
    
            private Fahrzeug _selectedFahrzeug;
            public  Fahrzeug SelectedFahrzeug
            {
                get
                {
                    return _selectedFahrzeug;
                }
                set
                {
                    _selectedFahrzeug = value;
                    OnPropertyChanged("SelectedFahrzeug");
                }
            }
    
            public Vm()
            {
                DispoplanContext = new DispoplanEntities();
                MyThings = new AutoRefreshWrapper<Fahrzeug>(DispoplanContext.Fahrzeug, RefreshMode.StoreWins);
            }
    
            public void Fahrzeugespeichern()
            {
                try
                {
                    int num = DispoplanContext.Fahrzeug.Context.SaveChanges();
                    MessageBox.Show("Anzahl der Zeilen: " + num, "Update erfolgreicht!");
                    DispoplanContext.Fahrzeug.Context.AcceptAllChanges();
                }
                catch (OptimisticConcurrencyException ex)
                {
                    MessageBox.Show(ex.Message, "Update fehlgeschlagen!");
                }
            }
    
            #region Property Changed
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected void OnPropertyChanged(string name)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs(name));
                }
            }
            #endregion
        }
    
    

    Wie kann ich nun mein inneres DataGrid sauber filtern?

    Freitag, 16. Dezember 2011 13:47

Alle Antworten