none
DataGrid mit ComboBox RRS feed

  • Frage

  • Hallo ich habe folgendes DatenGrid

    <DataGrid x:Name="dataUe"  AutoGenerateColumns="False" >
                <DataGridTextColumn Binding="{Binding Mitarbeiter}" Header="Mitarbeiter" IsReadOnly="True"/>
                <DataGridComboBoxColumn ItemsSource="" Header = "Rolle"/>
    
    </DataGrid>

    Ich möchte die ComboBox und das Datengrid mit Werten Werten füllen.  

    var qUebersicht = from tmf in db.Mitarbeiter
                                  select new { Mitarbeiter = tmf.maID, Rolle = tmf.RoleNr };
                dataUe.ItemsSource = qUebersicht.ToList();
    Doch mein Problem ist. Die Werte für das DataGrid kann ich ja einfügen siehe oben, doch wie kann ich  die Werte für die ComboBox übergeben? Diese liegen in einer extra Tabelle Rolle und haben eine ID und Namen. Ich möchte in der ComboBox den Namen anzeigen aber den Grid immer nur die ID übergeben. 

    Montag, 25. Januar 2016 11:41

Antworten

  • Hallo,

    die DataGridComboBoxColumn-Klasse hat eine ItemsSource-Eigenschaft. Über diese kannst du wie bei einer normalen ComboBox die Items einfüllen und dann mit DisplayMamerPath sowie SelectedValuePath/Binding die anzuzeigenden bzw., zu bindenden Daten bestimmen. Hier ein Beispiel dazu:

    <DataGrid x:Name="dataUe" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Mitarbeiter}" Header="Mitarbeiter" IsReadOnly="True"/>
            <DataGridComboBoxColumn Header="Rolle" x:Name="colRolle" SelectedValuePath="ID" SelectedValueBinding="{Binding Rolle, Mode=OneWay}"  DisplayMemberPath="Name"/>
        </DataGrid.Columns>
    </DataGrid>
    var qUebersicht = Enumerable.Range(0, 100).Select(x => new { Mitarbeiter = x.ToString(), Rolle = x % 5 });
    dataUe.ItemsSource = qUebersicht.ToList();
    
    colRolle.ItemsSource = Enumerable.Range(0, 5).Select(x => new { ID = x, Name = "Name " + x });
    Bedenke dass das DG hier die Daten nur anzeigt, eine Änderung wird nicht zurück in die Quellliste geschrieben. Hierfür musst du die Mode-Eigenschaft des Bindings entsprechend anpassen und im Backend keinen anonymen Typ verwenden.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert MietzeTatze Montag, 25. Januar 2016 16:00
    Montag, 25. Januar 2016 13:58
    Moderator

Alle Antworten