WPF - Datagrid - MasterDetailRelationship via ComboBox



  • Hallo erstmal,

    ich wollte bei mir in der Applikation ein Datagrid mit einer ComboBox einbauen. Dabei ist dann der Server der Master und der ServerType soll über die ComboBox auswählbar sein und ist somit das Details Element. Das Datenobjekt des Servers beinhaltet dabei noch weitere Elemente (wie z.B. TCP/IP oder UDP, Ip-Adresse, usw.). Als Binding Source habe ich ein Entity Framework Objekt.

    <Grid>
            <toolkit:DataGrid Name="ServerGrid" AutoGenerateColumns="False">
                <toolkit:DataGrid.Columns>
                    <toolkit:DataGridTextColumn Binding="{Binding Path=ServerName}"
                                                Header="Name" Width="auto"></toolkit:DataGridTextColumn>
                    <toolkit:DataGridTextColumn Binding="{Binding Path=ServerType}"
                                                Header="ServerType" Width="auto"></toolkit:DataGridTextColumn>
                    <toolkit:DataGridComboBoxColumn ItemsSource="{Binding Path=ServerType}"></toolkit:DataGridComboBoxColumn>
                </toolkit:DataGrid.Columns>
            </toolkit:DataGrid>
        </Grid>
    

    In dem oben gezeigten Code werden im Moment nur die 2 Spalten ServerName und ServerType angezeigt. In der Master Tabelle sind aber noch mehr Spalten enthalten, die ich gerne anzeigen würde. Wenn ich die Property "AutoGenerateColumns=TRUE" setze, werden diese auch angezeigt. Jedoch werden auch NOCHEINMAL die Spalten für ServerName und ServerType angezeigt. Ich hätte also gerne eine Mischung aus automatisch generierten Spalten und Spalten für die ich spezielle Control Elemente nutzen will (wie z.B. den Textblock oder die ComboBox) ohne dass ich
    1. alle Spalten im XAML beschreiben muss, wie ich es nur mit diesen paar speziellen Spalten vorhabe
    2. keine der Spalten doppelt vorkommt, was passieren würde, wenn ich "AutoGenerateColumns=TRUE" setzen würde.

    Kann man so etwas mit einem DataTemplate schaffen, oder wie geht so etwas? Ein DataTemplate soll doch genau für so etwas Sorge tragen. Es soll doch eine Beschreibung sein, wie ich Daten darstellen möchte ... daher würde ich halt auf so etwas tippen. In den WebCasts, die ich mir bisher angeschaut habe, waren allerdings alle Elemente die am Ende in der View dargestellt worden sind auch in diesen DataTemplates enthalten und genau dieses würde ich halt gerne vermeiden, da ich die darunterliegende Datenstruktur gerne flexibel halten würde und unter Umständen noch zusätliche Spalten/Properties hinzukommen könnten ohne das ich sie im XAML explizit erwähnen möchte.

    Desweiteren würde ich auch gerne die Spaltenüberschriften in andere Sprachen übersetzen wollen. Da bleibt mir, so wie ich das bisher sehe, eh nichts anderes zur Auswahl als alle Spalten in XAML zu beschreiben um ihnen einen "Link" auf die entsprechende Sprache zu liefern, oder wäre das auch mit automatisch generierten Spalten machbar?

    Fazit:
    Ich würde gerne alle Spalten/Properties meines Datenobjekts anzeigen lassen und bei bestimmten Spalten/Properties eine genauere Beschreibung in XAML hinterlegen können.

    Ich hoffe ich habe mein Problem gut genug beschrieb, so dass es einigermassen verständlich ist.

    Ich fange gerade erst mit C# und WPF an und wäre für jede Hilfe dankbar. Für die Beantwortung einer meiner fragen gibt's ein virtuelles Gummibärchen. 😉

    Gruß
    GastWhatEver

    P.S.:
    Im Moment werden mir auch noch keine ChildElemente in der ComboBox angeboten. Wenn ihr da was in dem Code sehen solltet, dass so etwas schon unmöglich macht könnt ihr mir da auch gerne einen Tip geben. Im Moment hat mein geladenes Server Objekt aber eine dicke "null" im ServerType stehen und ich denke nicht, dass es an dem XAML Code liegt, dass nichts angezeigt wird. Ich bin noch nicht so ganz firm, was das DataBinding angeht. Wenn ich damit nicht allein weiterkommen sollte, werd ich aber auch noch einmal einen neuen Thread aufmachen. 😉


Log in to reply