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 Code-Beispiel: Laden von Daten mit Linq

28.12.2018 (👁14990)


 

 

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

 

 

    }

}