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{ get; set; } public string Nachname { get; set; } public string Maschine { get; set; } public string Maschinengruppe { get; set; } public string Schicht { get; set; } public string Schichtgruppe { get; set; } //------</ 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() >---------------- }
|