Projekt-Anfragen: Tel: 07022/9319004 info@CodeDocu.de Software Entwicklung in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

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() >----------------

}

 

 

Mobile
»
EF: Entity Framework SELECT Abfrage
»
EF: Find Text, DFirst DLookup
»
EF: neuen Datensatz anlegen, wenn kein Treffer gefunden
»
WPF: Datenbank Connection ändern zur Laufzeit
»
EF WPF : Direktes Aufrufen und Durchlaufen einer Tabelle in Entity Framework
»
WPF Datagrid mit neuen Daten laden
»
The cast to value type System.Int32 failed because the materialized value is null
»
Linq: neuen Datensatz erstellen
»
Linq: komplette Tabelle ausgeben
»
Linq: einzelne Spalten ausgeben aus einer SQL Tabelle

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Info@CodeDocu.de