Das folgende C# Code-Snippet zeigt wie man mit Linq vereinfacht Daten in eine Anwendung laden kann, ohne komplexes SQL zu verwenden.
Mit einer var Query werden die Daten aus einer SQL Tabelle geholt und anschliessend in einem foreach Loop zeilenweise durchlaufen.
Wichtig ist dabei, dass die Loop-Variable var maschine in diesem Beispiel zur Laufzeit und in der Entwicklungszeit die Eigenschaften und Felder der Tabelle übernimmt.
Deshalb wird die Abfrage von Tabellen-Feldern wie maschine.Hintergrundfarbe zur Laufzeit möglich.
//--< Maschinen_holen >-- var query_Maschinen = (from tbl in db.tblBase_Maschinen where tbl.IDMaschinengruppe == maschinenGruppe.IDMaschinenGruppe orderby tbl.Position_Tafel ascending select tbl); ////--</ Maschinen_holen >--
//------< Loop@: Maschinen >------ foreach (var maschine in query_Maschinen) { //----< Maschine >---- rowNr++;
//< Label_Maschine > Add_Row_GridPlan(); string sColor_Maschine = maschine.Hintergrundfarbe ?? ""; if ( sColor_Maschine == "") sColor_Maschine = _sColor_Header_Maschine;
Insert_Label_in_Grid(maschine.Maschine, rowNr, 0, 1, sColor_Maschine); //</ Label_Maschine > .. |
Kompletter C# Code zum dynamischen Füllen eines Datengrids
Wichtig ist in diesem Beispiel, wie werden zur Laufzeit mit Linq Daten von einer Datenbank-Tabelle geholt und wie werden zur Laufzeit in WPF einem Datengrid neue Zeilen, Spalten und Anzeige-Elemente hinzugefügt.
using System; using System.Collections.Generic; using System.Globalization; //*Kalenderwoche using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;
namespace Schichtplaner { /// <summary> /// Interaction logic for pg_Schichtplan.xaml /// </summary> public partial class Page_Schichtplan : Page { #region Variablen //=============< region: Variablen >============= private dbConnectionString db; int _Kalenderwoche = 0; DateTime _monday_of_PlanWeek ; int _Anzahl_Tagesschichten = 3; int _Breite_Schicht = 140; int _row_Height = 30; string _Color_Header_Days = "#55ffdd38"; string _Color_Header_Schicht = "#a7f442"; string _sColor_Header_MaschinenGruppe = "#55FFFF00"; string _sColor_Header_Maschine = "#55FF0000"; string _sColor_Cell = "#55999999";
//private int iDay; //=============</ region: Variablen >============= #endregion
#region Form //=============< region: Form >============= public Page_Schichtplan() { InitializeComponent(); db = new dbConnectionString(); if (db.Database.Connection.State == System.Data.ConnectionState.Closed || db.Database.Connection.State == System.Data.ConnectionState.Broken) db.Database.Connection.Open();
//--< init >-- _monday_of_PlanWeek = Get_Monday_of_Date(DateTime.Today); Grid_Plan_Init_Grid();
Show_Kalenderwoche(); //--</ init >-- } //=============</ region: Form >============= #endregion
#region Buttons //=============< region: Buttons >============= private void BtnWoche_Previous_Click(object sender, RoutedEventArgs e) {
_monday_of_PlanWeek=_monday_of_PlanWeek.AddDays(-7); Show_Kalenderwoche(); }
private void BtnWoche_Next_Click(object sender, RoutedEventArgs e) { _monday_of_PlanWeek = _monday_of_PlanWeek.AddDays(+7); Show_Kalenderwoche(); } //=============</ region: Buttons >============= #endregion
#region Methoden //=============< region: Methoden >============= private void Show_Kalenderwoche() { _Kalenderwoche = Get_Week(_monday_of_PlanWeek); Kalenderwoche_Textfeld_anzeigen(); Grid_Plan_laden(); }
private void Kalenderwoche_Textfeld_anzeigen() { TbxWoche.Text = "KW " + _Kalenderwoche; }
private int Get_Week(DateTime day) { //------------< Get_Current_Week() >------------ //*gets the current calendar week CultureInfo cultureInfo = new CultureInfo("de-DE"); //current country language System.Globalization.Calendar calendar = cultureInfo.Calendar; //Calendar Object has infos about Weeks and local stuff
int current_Week = calendar.GetWeekOfYear(day, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
//< out > return current_Week; //</ out > //------------</ Get_Current_Week() >------------ }
private DateTime Get_Monday_of_Date(DateTime dt) { //------------< Get_Monday_of_Date() >------------ //*gets the monday of a day //*dt.DayOfWeek -> 0=Sunday, 1=Monday.. int intDayOfWeek = (int) dt.DayOfWeek; int intOffset_Weekday = intDayOfWeek==0 ? -6 : intDayOfWeek - 1; //*condition ? result : alternative
DateTime dtMonday = dt.AddDays(intOffset_Weekday);
//< out > return dtMonday; //</ out > //------------</ Get_Monday_of_Date() >------------ }
public void Place_Element_in_Grid(UIElement element, int rowNr, int colNr, int colSpan=1) { Grid.SetRow(element, rowNr); Grid.SetColumn(element, colNr); Grid.SetColumnSpan(element, colSpan); }
public void Insert_Label_in_Grid(string sLabel, int rowNr, int colNr, int colSpan = 1, string sColor="#F0F0F0F0", HorizontalAlignment align_Horizontal=HorizontalAlignment.Center) { //-------------< Insert_Label_in_Grid() >------------- //-< day_background >- Border pnlBackground = new Border(); Color color = (Color)ColorConverter.ConvertFromString(sColor); pnlBackground.Background = new SolidColorBrush(color); pnlBackground.Margin = new Thickness(1); Place_Element_in_Grid(pnlBackground,rowNr ,colNr,colSpan); Grid_Plan.Children.Add(pnlBackground); //-< day_background >-
Label lblSchicht = new Label(); lblSchicht.Content = sLabel ; lblSchicht.HorizontalAlignment =align_Horizontal; Place_Element_in_Grid(lblSchicht, rowNr, colNr);
Grid_Plan.Children.Add(lblSchicht); //-</ day_label >- //-------------</ Insert_Label_in_Grid() >------------- }
public void Add_Row_GridPlan() { RowDefinition row = new RowDefinition(); row.Height = new GridLength(_row_Height); Grid_Plan.RowDefinitions.Add(row); } //=============</ region: Methoden >============= #endregion
#region Grid_Plan private void Grid_Plan_laden() { //---------------------< Grid_Plan_laden() >--------------------- Grid_Plan_Clear_Children(); Grid_Plan_Panels_einfuegen(); Grid_Plan_Row_Header_fuellen(); Grid_Plan_Maschinen_fuellen();
//---------------------</ Grid_Plan_laden() >--------------------- }
private void Grid_Plan_Clear_Children() { //---------------------< Grid_Plan_clear() >--------------------- Grid_Plan.Children.Clear(); Grid_Plan.RowDefinitions.Clear();
//---------------------</ Grid_Plan_clear() >--------------------- }
private void Grid_Plan_Init_Grid() { //---------------------< Grid_Plan_Init_Grid() >--------------------- Grid_Plan_Columns_laden(); //Grid_Plan.RowDefinitions.Clear(); //Grid_Plan.Children.Clear(); //Grid_Plan_Rows_laden(); //---------------------</ Grid_Plan_Init_Grid() >--------------------- }
private void Grid_Plan_Columns_laden() { //---------------------< Grid_Plan_Columns_laden() >--------------------- //--------< Columns >-------- //< column_Maschinen > ColumnDefinition column = new ColumnDefinition(); column.Name = "col_Maschinen"; Grid_Plan.ColumnDefinitions.Add(column); //</ column_Maschinen >
//----< @Loop: Days >---- //*fuer jeden Tag mehrere Spalten anlegen for (int iDay=0;iDay< (7*_Anzahl_Tagesschichten ) ;iDay++) { column = new ColumnDefinition(); column.Width = new GridLength( _Breite_Schicht); Grid_Plan.ColumnDefinitions.Add(column); } //----</ @Loop: Days >---- //--------</ Columns >--------
//---------------------</ Grid_Plan_Columns_laden() >--------------------- }
private void Grid_Plan_Row_Header_fuellen() { //--------< Grid_Plan_Row1_fuellen() >------------ Add_Row_GridPlan(); //Tag rowNr=0 Add_Row_GridPlan(); //Schicht rowNr=1
//--< Schichtmodel_holen >-- var data_Schichten = (from tbl in db.tblBase_Schichten orderby tbl.SortierNr ascending select tbl.Schicht); //--</ Schichtmodel_holen >-- _Anzahl_Tagesschichten = data_Schichten.Count(); //< check > if(_Anzahl_Tagesschichten<1) { MessageBox.Show("Anzahl Schichten ist 0", "Schichten erstellen"); return; } //</ check > //------< Header_Tage_fuellen >------ for (int iDay=0;iDay<7;iDay++) { DateTime day = _monday_of_PlanWeek.AddDays(iDay);
//-< day_Header >- Insert_Label_in_Grid(day.ToString("ddd dd.MM.yyyy"), 0, 1 + (iDay * _Anzahl_Tagesschichten), _Anzahl_Tagesschichten, _Color_Header_Days); int intSpalteDay = (iDay * _Anzahl_Tagesschichten); //-</ day_Header >-
//-< day_label >- int iSchicht = -1; foreach (var Schicht in data_Schichten) { iSchicht++; Insert_Label_in_Grid(Schicht, 1, 1 + intSpalteDay + iSchicht,1, _Color_Header_Schicht, HorizontalAlignment.Center); }
//----</ day_TagesSchichten >----
} //------</ Header_Tage_fuellen >------
//--------</ Grid_Plan_Row1_fuellen() >------------ }
private void Grid_Plan_Maschinen_fuellen() { //--------< Grid_Plan_Maschinen_fuellen() >------------
//< Header_Maschinen > Insert_Label_in_Grid("Maschinen", 0 , 0); //</ Header_Maschinen >
int rowNr = Grid_Plan.RowDefinitions.Count-1;
//--< Maschinen_holen >-- var query_MaschinenGruppen = (from tbl in db.tblBase_Maschinengruppen orderby tbl.SortierNr ascending select tbl); //--</ Maschinen_holen >--
//------< Loop@: MaschinenGruppen >------ foreach (var maschinenGruppe in query_MaschinenGruppen) { //------< MaschinenGruppen >------
rowNr++; //< addRow MaschinenGruppe > Add_Row_GridPlan();
string sColor_MaschinenGruppe = maschinenGruppe.Hintergrundfarbe ?? ""; if (sColor_MaschinenGruppe == "") sColor_MaschinenGruppe = _sColor_Header_MaschinenGruppe;
Insert_Label_in_Grid(maschinenGruppe.MaschinenGruppe, rowNr, 0, (7*_Anzahl_Tagesschichten)+1, sColor_MaschinenGruppe, HorizontalAlignment.Left); //</ addRow MaschinenGruppe >
//--< Maschinen_holen >-- var query_Maschinen = (from tbl in db.tblBase_Maschinen where tbl.IDMaschinengruppe == maschinenGruppe.IDMaschinenGruppe orderby tbl.Position_Tafel ascending select tbl); ////--</ Maschinen_holen >--
//------< Loop@: Maschinen >------ foreach (var maschine in query_Maschinen) { //----< Maschine >---- rowNr++;
//< Label_Maschine > Add_Row_GridPlan(); string sColor_Maschine = maschine.Hintergrundfarbe ?? ""; if ( sColor_Maschine == "") sColor_Maschine = _sColor_Header_Maschine; Insert_Label_in_Grid(maschine.Maschine, rowNr, 0, 1, sColor_Maschine); //</ Label_Maschine >
//--< @Loop: Mitarbeiter >-- //< get_MaxMitarbeiter > int maxAnzahl_Mitarbeiter = maschine.Anzahl_Mitarbeiter_Schicht_1 ?? 0; int Anzahl_Mitarbeiter2 = maschine.Anzahl_Mitarbeiter_Schicht_2 ?? 0; int Anzahl_Mitarbeiter3 = maschine.Anzahl_Mitarbeiter_Schicht_3 ?? 0; if(maxAnzahl_Mitarbeiter < Anzahl_Mitarbeiter2) maxAnzahl_Mitarbeiter=Anzahl_Mitarbeiter2; if (maxAnzahl_Mitarbeiter < Anzahl_Mitarbeiter3) maxAnzahl_Mitarbeiter = Anzahl_Mitarbeiter3; //</ get_MaxMitarbeiter >
for (int iMitarbeiter=1; iMitarbeiter <= maxAnzahl_Mitarbeiter; iMitarbeiter++) { if(iMitarbeiter>1) { Add_Row_GridPlan(); rowNr++; }
int nColumns = Grid_Plan.ColumnDefinitions.Count(); for(int iColNr=1;iColNr < nColumns;iColNr++) { //-< panel >- Border pnlBackground = new Border(); Color color = (Color)ColorConverter.ConvertFromString(_sColor_Cell); pnlBackground.Background = new SolidColorBrush(color); pnlBackground.Margin = new Thickness(1); Place_Element_in_Grid(pnlBackground, rowNr, iColNr, 1); Grid_Plan.Children.Add(pnlBackground); //-< panel >- } } //--</ @Loop: Mitarbeiter >--
} //------</ Loop@: Maschinen >------
//------</ MaschinenGruppen >------ } //------</ Loop@: MaschinenGruppen >------
//--------</ Grid_Plan_Maschinen_fuellen() >------------ }
private void Grid_Plan_Panels_einfuegen() { //--------</ Grid_Plan_Panels_einfuegen() >------------
//----< Cell_Block: Days >---- for(int iRow=2; iRow < Grid_Plan.RowDefinitions.Count; iRow++) {
RowDefinition row = Grid_Plan.RowDefinitions[iRow];
for (int iCol = 1; iCol < Grid_Plan.ColumnDefinitions.Count; iCol++) { ColumnDefinition col = Grid_Plan.ColumnDefinitions[iCol];
Border panel = new Border(); Grid.SetColumn(panel, iCol); Grid.SetRow(panel, iRow);
//panel.MouseEnter += Panel_MouseEnter; //panel.MouseLeave += Panel_MouseLeave; ; panel.Margin = new Thickness(1); panel.Background = new SolidColorBrush(Color.FromArgb(230, 230, 230, 230)); Grid_Plan.Children.Add(panel);
} //--------</ Grid_Plan_Panels_einfuegen() >------------ } //----</ Cell_Block: Days >----
}
#endregion /Grid_Plan
} }
|