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 Vorlage: Datensätze in einer Tabelle verwalten

28.12.2018 (👁19123)

WPF Vorlage: DatensÀtze in einer Tabelle verwalten CRUD

 

 

Das folgende Code Beispiel stellt eine einfache Tabellenverwaltung fĂŒr DatensĂ€tze dar.

Dabei können in einer Tabelle:

 

1.    

DatensÀtze erstellt werden (New, Create)

2.    

Daten angezeigt werden (Read)

3.    

Daten geÀndert werden (Update)

4.    

DatensÀtze gelöscht werden (Delete)

 

 

CRUD

: Create Read Update Delete

 

 

 

WPF Seite

Frontpage, XAML Code in WPF

Die Front-Seite enthĂ€lt eine Tabelle mit den DatensĂ€tzen, die Textfelder zur Anzeige und zum Ändern und Buttons zum speichern, Neu erstellen und zum Löschen von Daten

 

<Page x:Class="Schichtplaner.Page_Base_Mitarbeiter"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:Schichtplaner"

        mc:Ignorable="d"

        Title="Mitarbeiter" Height="450" Width="800"  FontSize="12pt">

 

    <Grid Margin="0,0,0,10">

        <Grid.RowDefinitions>

            <RowDefinition Height="40"/>

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

 

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="387*"/>

            <ColumnDefinition Width="406*"/>

        </Grid.ColumnDefinitions>

 

        <Label Content="Mitarbeiter" 

               Margin="10,10,0,0"

               Grid.Row="0" Grid.Column="0" 

               />

        <DataGrid x:Name="ctlDataGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"

                 AutoGenerateColumns="False"

                 GridLinesVisibility="All"

                 Background="#F0f0f0"

                 ItemsSource="{Binding}" 

                 SelectionMode="Single" 

                 IsReadOnly="True" 

                 MouseDoubleClick="ctlDataGrid_MouseDoubleClick"

                  SelectionChanged="CtlDataGrid_SelectionChanged"

                  HeadersVisibility="All"                  

                  Grid.Row="1" 

                  

                 >

 

            <DataGrid.Columns >

                <DataGridTextColumn Header="ID" Binding="{Binding IDMitarbeiter}"/>

                <DataGridTextColumn Header="Nachname" Binding="{Binding Nachname}"/>

                <DataGridTextColumn Header="Vorname" Binding="{Binding Vorname}"/>

                <DataGridTextColumn Header="PersonalNr" Binding="{Binding Personalnummer}" Width="*"/>

 

 

 

            </DataGrid.Columns>

        </DataGrid>

 

        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" Margin="0.8,0,-0.4,0">

            <Button x:Name="BtnSpeichern" Content="Speichern" Width="99"

                Click="BtnSpeichern_Click"   />

            <Button x:Name="BtnNeu" Content="Neu" Width="99"

                Click="BtnNeu_Click"   Margin="6,0,0,0" />

            <Button x:Name="BtnLoeschen" Content="Löschen" Width="99"

                Click="BtnLoeschen_Click"   Margin="6,0,0,0" />

        </StackPanel>

 

        <!--========< Grid_Eingabe Texte >=========-->

 

        <Grid x:Name="Grid_Eingabe"  Grid.Row="1" Grid.Column="1" Margin="10" >

            <Grid.RowDefinitions>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

                <RowDefinition Height="40"/>

            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>

                <ColumnDefinition Width="120"/>

                <ColumnDefinition Width="*"/>

            </Grid.ColumnDefinitions>

 

 

            <Label Content="ID:" Grid.Column="0" Grid.Row="0" />

            <TextBox x:Name="tbxID" Grid.Column="1" Grid.Row="0"

                    Width="51" HorizontalAlignment="Left" IsReadOnly="True" Background="Transparent"  BorderBrush="Transparent"  />

 

 

            <Label Content="Vorname:" Grid.Row="1" Grid.Column="0"/>

            <TextBox x:Name="tbxVorname" Grid.Row="1" Grid.Column="1"

                 HorizontalAlignment="Left" Width="265"/>

 

            <Label Content="Nachname:" Grid.Row="2" Grid.Column="0"/>

            <TextBox x:Name="tbxNachname" Grid.Row="2" Grid.Column="1"

                 HorizontalAlignment="Left" Width="265"/>

 

            <Label Content="PersonalNr:" Grid.Row="3" Grid.Column="0"/>

            <TextBox x:Name="tbxPersonalNr" Grid.Row="3" Grid.Column="1"

                 HorizontalAlignment="Left" Width="265"/>

        </Grid>

 

        <!--========</ Grid_Eingabe Texte >=========-->

 

    </Grid>

</Page>

 

 

 

WPF C# Code-Behind Seite

In der Codeseite werden die Daten von einer Datenbank mit Linq geladen.

Dabei werden die Daten in das Datengrid geladen. In der Detailansicht werden der aktuelle Datensatz geladen, neu erstellt, geÀndert, gespeichert und gelöscht.

using System;

using System.Collections.Generic;

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.Shapes;

 

namespace Schichtplaner

{

 

    public partial class Page_Base_Mitarbeiter : Page

    {

        #region Formular

 

        private dbConnectionString db;

 

        public Page_Base_Mitarbeiter()

        {

            //----< create >----

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

 

            load_DataGrid();

 

            //load_Dataset_byID(1);

            //----</ create >----

        }

 

        #endregion  /Formular

 

        #region  Buttons

        //-------------------------< region: Buttons >-------------------

        private void BtnLoeschen_Click(object sender, RoutedEventArgs e)

        {

            if (tbxID.Text != "")

            {

                del_Data();

            }

            else

            {

                MessageBox.Show("Bitte zuerst einen Datensatz auswĂ€hlen!");

            }

        }

 

        private void BtnNeu_Click(object sender, RoutedEventArgs e)

        {

            Reset_Entry_Fields();

            tbxVorname.Focus();

        }

 

        private void BtnSpeichern_Click(object sender, RoutedEventArgs e)

        {

            if (tbxID.Text == "")

            { add_Data(); }

            else

            {

                save_Data();

            }

 

            load_DataGrid();

        }

 

 

 

 

        //-------------------------</ region: Buttons >-------------------

        #endregion   /Buttons

 

 

        #region  Controls

        //-------------------------< region: Controls >-------------------

        private void ctlDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)

        {

            tblBase_Mitarbeiter freiertag = (tblBase_Mitarbeiter)ctlDataGrid.SelectedItem;

            load_Dataset_byID(freiertag.IDMitarbeiter);

        }

        private void CtlDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            if (ctlDataGrid.SelectedItem != null)

            {

                tblBase_Mitarbeiter freiertag = (tblBase_Mitarbeiter)ctlDataGrid.SelectedItem;

                load_Dataset_byID(freiertag.IDMitarbeiter);

            }

        }

        //-------------------------</ region: Controls >-------------------

        #endregion  /Controls

 

 

 

 

        #region  Methoden

        //-------------------------< region: Methoden >-------------------

        private void Auto_Speichern_event(object sender, TextChangedEventArgs e)

        {

            Auto_Speichern();

        }

        public void Auto_Speichern()

        {

            save_Data();

            //#todo: aktuelle Zeile item refresh

        }

        //-------------------------</ region: Methoden >-------------------

        #endregion  /Methoden

 

 

        #region Datenbank

        //---------------------< region: Datenbank >-------------------------------

        public async void load_Dataset_byID(int ID)

        {

            //----------------< load_Dataset_byID() >----------------

            try

            {

                var data = db.tblBase_Mitarbeiter.FirstOrDefault(id => id.IDMitarbeiter == ID);

                if (data != null)

                {

                    //--< felder fuellen >--

                    tbxID.Text = data.IDMitarbeiter.ToString();

                    tbxVorname.Text = data.Vorname.ToString() ;

                    tbxNachname.Text = data.Nachname.ToString();

                    tbxPersonalNr.Text = data.Personalnummer;

 

                    //--</ felder fuellen >--

                }

                await db.SaveChangesAsync();

 

            }

            catch (Exception ex)

            {

                System.Diagnostics.Debug.WriteLine(ex);

            }

 

            //----------------</ load_Dataset_byID() >----------------

        }

 

        public void save_Data()

        //------------< save_Data() >------------

        {

            string sID = tbxID.Text;

            //< check >

            if (sID == ""return;

            //</ check >

 

            int ID = Convert.ToInt32(sID);

 

            tblBase_Mitarbeiter data;

            data = db.tblBase_Mitarbeiter.SingleOrDefault(n => n.IDMitarbeiter == ID);

            if (data != null)

            {

                data.dtCreated = DateTime.Now;

                data.Vorname = tbxVorname.Text;

                data.Nachname  = tbxNachname.Text;

                data.Personalnummer = tbxPersonalNr.Text;

                

 

                //< save >

                db.SaveChanges();               //ID: -99999->16

                load_DataGrid();

                //</ save >

            }

            //------------</ save_Data() >------------

        }

 

        public void add_Data()

        //------------< add_Data() >------------

        {

            tblBase_Mitarbeiter data = new tblBase_Mitarbeiter();

            data.dtCreated = DateTime.Now;

            data.Vorname = tbxVorname.Text;

            data.Nachname  = tbxNachname.Text;

            data.Personalnummer= tbxPersonalNr.Text ;

 

            //< save >

            db.tblBase_Mitarbeiter.Add(data); //ID: 0->-99999

            db.SaveChanges();               //ID: -99999->16

            load_DataGrid();

            //</ save >

 

            //< new ID >

            int ID = data.IDMitarbeiter;

            //</ new ID >

            tbxID.Text = ID.ToString();

            //------------</ save_Data() >------------

        }

 

        public void del_Data()

        {

            int id = Convert.ToInt32(tbxID.Text);

            tblBase_Mitarbeiter data;

            data = db.tblBase_Mitarbeiter.SingleOrDefault(x => x.IDMitarbeiter == id);

            db.tblBase_Mitarbeiter.Remove(data);

            db.SaveChanges();

            load_DataGrid();

            Reset_Entry_Fields();

        }

 

 

        private void Reset_Entry_Fields()

        {

            tbxID.Text = "";

            tbxVorname.Text = "";

            tbxNachname.Text = "";

            tbxPersonalNr.Text = "";            

        }

 

 

        //---------------------</ region: Datenbank >-------------------------------

        #endregion /Datenbank

 

        #region Grid

        //---------------------< region: Grid >-------------------------------

        private void load_DataGrid()

        {

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

            ctlDataGrid.Items.Clear();

 

            try

            {

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

                //< get_Data >

                var data = (from tbl in db.tblBase_Mitarbeiter

                            orderby tbl.Nachname  ascending

                            select tbl).Take(1000);

                //</ get_Data >

 

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

                foreach (var row in data)

                {

                    ctlDataGrid.Items.Add(row);

                }

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

 

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

            }

            catch (Exception ex)

            {

 

                MessageBox.Show(ex.Message);

            }

 

 

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

        }

 

 

        //---------------------</ region: Grid >-------------------------------

        #endregion /Grid

 

 

 

    }

}

 

 

 

Betrifft: Linq EF Entity Framework