Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

WPF Datagrid mit neu definierten Daten laden

13.01.2019 (👁581)

WPF Datagrid mit neuen Daten laden

 

 

Wie kann man eine WPF Datagrid mit frei definierten Daten befüllen?

 

Aufgabe:

Ich möchte ein Datagrid laden mit Texten, die zusätzlich zu einer Linq Abfrage erweiterte Informationen enthält.

 

Lösung:

Über das Erstellen einer zusätzlicher Daten-Klasse. Man kann die class definition am Ende der Datei anfügen, welche das Datengrid verwendet.

 

public partial class ListItem_Auswahl

{

    //------< ListItems fuer DataGrid >-------

    public int IDMitarbeiter{ getset; }

    public string Nachname { getset; }

    public string Maschine { getset; }

    public string Maschinengruppe { getset; }

    public string Schicht { getset; }

    public string Schichtgruppe { getset; }

    //------</ ListItems fuer DataGrid >-------

}

 

 

Anschliessend kann man beim Durchlaufen der Ergebnisse der Linq Abfrage jeweils eine neue Zeile mit dem neuen Klassentyp erstellen.

ListItem_Auswahl item = new ListItem_Auswahl();

                item.IDMitarbeiter = row.IDMitarbeiter;

                item.Maschine = row.Maschine;

                item.Nachname = row.Nachname;

                item.Maschinengruppe = row.Maschinengruppe;

ctlDataGrid.Items.Add(item);

 

 

 

Wie man sieht im Projekt Schichtplan, wird anschliessend das Datagrid geladen

 

In Xaml das Datagrid

<DataGrid x:Name="ctlDataGrid"  Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"

         AutoGenerateColumns="False"

         GridLinesVisibility="All"

         Background="#F0f0f0"

         ItemsSource="{Binding}" 

         SelectionMode="Single" 

         IsReadOnly="True" 

         SelectionChanged="CtlDataGrid_SelectionChanged"

         

         HeadersVisibility="All"    

         SelectedValuePath="Name" Margin="0,0,-0.4,-0.2" Grid.RowSpan="2" 

         >

 

            <DataGrid.Columns >

                <DataGridTextColumn Header="IDMitarbeiter" Binding="{Binding IDMitarbeiter}" Visibility="Hidden"/>

                <DataGridTextColumn Header="Name" Binding="{Binding Nachname}" Width="130"/>

                <DataGridTextColumn Header="Schicht" Binding="{Binding Schicht}" Width="100"/>

                <DataGridTextColumn Header="SGruppe" Binding="{Binding Schichtgruppe}" Width="100"/>

                <DataGridTextColumn Header="Maschine" Binding="{Binding Maschine}"  Width="100" />

                <DataGridTextColumn Header="MGruppe" Binding="{Binding Maschinengruppe}"  Width="*" />

            </DataGrid.Columns>

        </DataGrid>

 

 

 

 

 

In Visual Studio

private void load_DataGrid()

{

    //----------------< load_DataGrid() >----------------

    ctlDataGrid.Items.Clear();

 

    try

    {

        //----< Daten laden >----

        //< get_Data >

        //#TODO: hier den Tag berechnen und die Schicht... anhand der Tag-Name vom Sourcepanel

 

        var data = (from tbl in db.tblBase_Mitarbeiter

 

                    join schichtGruppe in db.tblBase_Schichtgruppen on tbl.IDSchichtgruppe equals schichtGruppe.IDSchichtgruppe into joined_Mitarbeiter_Schichtruppen

                    from linked_Schichtgruppen in joined_Mitarbeiter_Schichtruppen.DefaultIfEmpty()

 

                    join maschine in db.tblBase_Maschinen on tbl.IDMaschine equals maschine.IDMaschine into joined_Mitarbeiter_Maschinen

                    from linked_Maschinen in joined_Mitarbeiter_Maschinen.DefaultIfEmpty()

 

                    join maschinenGruppen in db.tblBase_Maschinengruppen on linked_Maschinen.IDMaschine equals maschinenGruppen.IDMaschinenGruppe into joined_Maschinen_Maschinengruppen

                    from linked_Maschinengruppen in joined_Maschinen_Maschinengruppen.DefaultIfEmpty()

 

 

                    orderby tbl.Nachname ascending

                    select new

                    {

                        IDMitarbeiter = tbl.IDMitarbeiter ,

                        Nachname = tbl.Nachname,

 

                        IDMaschine = tbl.IDMaschine,

                        Maschine = linked_Maschinen.Maschine,

                        IDMaschinengruppe= (int?) linked_Maschinengruppen.IDMaschinenGruppe ,

                        Maschinengruppe = linked_Maschinengruppen.MaschinenGruppe,

                        IDSchichtgruppe =tbl.IDSchichtgruppe,

                        Schichtgruppe = linked_Schichtgruppen.Schichtgruppe

 

                    }

                    )

                    .Take(1000);

 

        //</ get_Data >

 

        //--< @Loop: Rows >--

        foreach (var row in data)

        {

            //if (row.IDMaschine == _IDMaschine)

            //{

            //    ListItem_Auswahl item = new ListItem_Auswahl();

            //    item.IDMitarbeiter = row.IDMitarbeiter;

            //    item.Maschine = row.Maschine;

            //    item.Nachname = row.Nachname;

            //    ctlDataGrid.Items.Add(item);

            //    ctlDataGrid.Items.Add(row);

            //}

            if (row.IDMaschinengruppe == _IDMaschinengruppe)

            {

                ListItem_Auswahl item = new ListItem_Auswahl();

                item.IDMitarbeiter = row.IDMitarbeiter;

                item.Maschine = row.Maschine;

                item.Nachname = row.Nachname;

                item.Maschinengruppe = row.Maschinengruppe;

                ctlDataGrid.Items.Add(item);

                //ctlDataGrid.Items.Add(row);

            }

 

            //ListItem_Auswahl item = new ListItem_Auswahl()

            //{

            //    Nachname = "Test"

            //};

 

 

 

        }

        //--</ @Loop: Rows >--

 

        //----</ Daten laden >----

    }

    catch (Exception ex)

    {

        MessageBox.Show(ex.Message);

    }

    //----------------</ load_DataGrid() >----------------

}