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 Beispiel : Anbinden einer Datenbank an ein Formular, Add, Save Delete

08.12.2018 (👁25944)

Beispiel-Code : Anbinden einer Datenbank an WPF Datengrid und Felder und Select, Save, Add, Delete

 

Der folgende Code zeigt anhand eines Feiertags Formulars, wie eine einfache lokale Tabelle einer WPF Datenbank an ein Formular als Liste mit einzelnen Textfelden angebunden wird.

Und wie neue Datensätze erstellt, geändert und gespeicht werden.

 

C# Code und WPF Xaml

Beispiel Code für WPF Anwendung

Zeigt:

Wie bindet man eine Datenbank an eine WPF Anwendung an?

Datentabelle in eine Anzeigeliste vom Typ Datagrid laden

Verwendet EntityFramework und Linq

 

 

using System;

using System.Data;  //*DataTable

using System.Linq;  //*Daten anbinden

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Input;

 

namespace Schichtplaner

{

 

    public partial class form_Base_Feiertage : Window

    {

        #region Formular

 

        private App_dbContext db;

 

        public form_Base_Feiertage()

        {

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

            InitializeComponent();

 

            db = new App_dbContext();

            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)

        {

 

        }

 

        private void BtnNeu_Click(object sender, RoutedEventArgs e)

        {

            Reset_Entry_Fields();            

        }

 

        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_Feiertage freiertag = (tblBase_Feiertage) ctlDataGrid.SelectedItem;

            load_Dataset_byID(freiertag.IDFeiertag);

        }

        private void CtlDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            if(ctlDataGrid.SelectedItem!=null)

            { 

                tblBase_Feiertage freiertag = (tblBase_Feiertage)ctlDataGrid.SelectedItem;

                load_Dataset_byID(freiertag.IDFeiertag);

            }

        }

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

        #endregion  /Controls

 

        #region Datenbank

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

        public async void load_Dataset_byID(int ID)

        {

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

            try

            {

                var data = db.tblBase_Feiertage.FirstOrDefault(id => id.IDFeiertag == ID);

                if (data != null)

                {

                    //--< felder fuellen >--

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

                    tbxFeiertag.Text = data.Feiertag;

                    tbxDatum_Feiertag.Text = data.Datum_Feiertag.ToString();

                    tbxKuerzel.Text = data.Kuerzel;

                    //--</ 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_Feiertage data;

            data = db.tblBase_Feiertage.SingleOrDefault(n => n.IDFeiertag == ID);

            if (data != null)

            {

                data.dtCreated = DateTime.Now;

                data.Feiertag = tbxFeiertag.Text;

                data.Kuerzel = tbxKuerzel.Text;

                data.Datum_Feiertag = Convert.ToDateTime( tbxDatum_Feiertag.Text);

 

                //< save >

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

                //</ save >

            }

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

        }

 

        public void add_Data()

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

        {

            tblBase_Feiertage data = new tblBase_Feiertage();

            data.dtCreated = DateTime.Now;

            data.Feiertag = tbxFeiertag.Text;

            data.Kuerzel = tbxKuerzel.Text;

 

            //< save >

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

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

            //</ save >

 

            //< new ID >

            int ID = data.IDFeiertag;

            //</ new ID >

            tbxID.Text = ID.ToString();

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

        }

 

 

        private void Reset_Entry_Fields()

        {

            tbxID.Text = "";

 

            tbxKuerzel.Text = "";

            tbxFeiertag.Text = "";

            tbxDatum_Feiertag.Text = "";          

 

        }

 

 

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

        #endregion /Datenbank

 

        #region Grid

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

        private void load_DataGrid()

        {

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

            ctlDataGrid.Items.Clear();

            ctlDataGrid.Columns.Clear();

            

            //--< Columns >----

            var column_ID = new DataGridTextColumn();

            column_ID.Header = "ID";

            column_ID.Binding = new Binding("IDFeiertag");

            ctlDataGrid.Columns.Add(column_ID);

 

            var column_Feiertag = new DataGridTextColumn();

            column_Feiertag.Header = "Feiertag";

            column_Feiertag.Binding = new Binding("Feiertag");

            ctlDataGrid.Columns.Add(column_Feiertag);

 

            var column_Datum_Feiertag = new DataGridTextColumn();

            column_Datum_Feiertag.Header = "Datum_Feiertag";

            column_Datum_Feiertag.Binding = new Binding("Datum_Feiertag");

            ctlDataGrid.Columns.Add(column_Datum_Feiertag);

 

 

            var col_Kuerzel = new DataGridTextColumn();

            col_Kuerzel.Header = "Kürzel";

            col_Kuerzel.Binding = new Binding("Kuerzel");

            ctlDataGrid.Columns.Add(col_Kuerzel);

 

            

            //--</ Columns >----

 

            try

            {

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

                //< get_Data >

                var data = (from tbl in db.tblBase_Feiertage

                            orderby tbl.Feiertag 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

 

 

    }

}

 

 

 

 

//public void new_Data()

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

//{

//    tblBase_Feiertage data;

//    data = db.tblBase_Feiertage.SingleOrDefault();

//    data = new tblBase_Feiertage();

//    data.dtCreated = DateTime.Now;

//    data.Feiertag = tbxFeiertag.Text;

 

//    //< save >

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

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

//    //</ save >

 

//    //< new ID >

//    int ID = data.IDFeiertag;

//    //</ new ID >

 

//    tbxID.Text = ID.ToString();

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

//}

 

 

 

 

 

 

 

//    //--< Add() >--

//    data = new tblBase_Feiertage();

//    data. = "neu";

//    data.dtCreated = DateTime.Now;

//    db.tblBase_Feiertage.Add(data);

//    //--</ Add() >--

//}

//else

//{

 

//--< Update() >--

//data.dtEdit = DateTime.Now;

//--</ Update() >--

 

 

 

 

//Delete---Vorlage

 

//        //< get_database >

//        NoteModel note = _dbContext.tbl_Notes.SingleOrDefault(n => n.IDNote == ID);

//        if (note == null) { return NotFound(); }

//        //</ get_database >

//        //< Delete Note >

//        _dbContext.tbl_Notes.Remove(note);      //set Flag

//                                                //</ Delete Note >

 

 

 

WPF Xaml Code Page für eine Formular mit Textfeldern, einer Datengrid Liste und einem DatePicker

Xaml Code

Zeigt die Elemente wie Buttons, Textfelder welche für das Formular benötigt werden.

<Window x:Class="Schichtplaner.form_Base_Feiertage"

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

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

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

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

      xmlns:local="clr-namespace:Schichtplaner"

      mc:Ignorable="d" 

      d:DesignHeight="450" d:DesignWidth="800"

      Title="Feiertage"  >

 

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

        <Grid.RowDefinitions>

            <RowDefinition Height="40"/>

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

 

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="350"/>

            <ColumnDefinition Width="406*"/>

        </Grid.ColumnDefinitions>

 

        <Label Content="Feiertage" 

               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" 

                 />

 

 

        <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"/>

            </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="99" HorizontalAlignment="Left" IsReadOnly="True"  />

 

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

            <DatePicker x:Name="tbxDatum_Feiertag" Width="126" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" Margin="0,0.2,0,40.4" Grid.RowSpan="2"   />

 

 

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

            <TextBox x:Name="tbxFeiertag"  Grid.Column="1" Grid.Row="2" Width="287" HorizontalAlignment="Left"   />

 

            <Label Content="Kürzel:" Grid.Column="0" Grid.Row="3"/>

            <TextBox x:Name="tbxKuerzel" Grid.Column="1" Grid.Row="2" Width="55" HorizontalAlignment="Left" Margin="0,40.4,0,0.2" Grid.RowSpan="2" />

 

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

            <TextBox x:Name="tbxHintergrundfarbe" Grid.Column="1" Grid.Row="3" Width="129" HorizontalAlignment="Left" Margin="0,40.6,0,0" Grid.RowSpan="2"  />

        </Grid>

 

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

    </Grid>

</Window>

 

 

 

Die angebunden Datenbank mit der Tabelle

tblBase_Feiertage

 

CREATE TABLE [dbo].[tblBase_Schichtmodell] (

    [IDSchichtmodell]      INT           IDENTITY (1, 1) NOT NULL,

    [Schichtmodell]        NVARCHAR (50) NULL,

    [Kuerzel]              NVARCHAR (5)  NULL,

    [Schicht_Beginn]       TIME (7)      NULL,

    [Schicht_Ende]         TIME (7)      NULL,

    [Schicht_Dauer]        TIME (7)      NULL,

    [Schicht_Pause]        TIME (7)      NULL,

    [Anzeige_in_Container] INT           NULL,

    [Hintergrundfarbe]     INT           NULL,

    [Textfarbe]            INT           NULL,

    [dtEdit]               DATETIME      NULL,

    [dtCreated]            DATETIME      NULL,

    PRIMARY KEY CLUSTERED ([IDSchichtmodell] ASC)

);

 

 

 

 

In diesem Fall ist die Datenbank mit der dbModel.Context.cs angebunden

 

 

Als Connectionstring sollte man allerdings doch eher dbConnectionstring wie von Microsoft vorgeschlagen lassen.

//------------------------------------------------------------------------------

// <auto-generated>

//     This code was generated from a template.

//

//     Manual changes to this file may cause unexpected behavior in your application.

//     Manual changes to this file will be overwritten if the code is regenerated.

// </auto-generated>

//------------------------------------------------------------------------------

 

namespace Schichtplaner

{

    using System;

    using System.Data.Entity;

    using System.Data.Entity.Infrastructure;

    

    public partial class App_dbContext : DbContext

    {

        public App_dbContext()

            : base("name=App_dbContext")

        {

        }

    

        protected override void OnModelCreating(DbModelBuilder modelBuilder)

        {

            throw new UnintentionalCodeFirstException();

        }

    

        public virtual DbSet<tblBase_Abwesenheitsgruende> tblBase_Abwesenheitsgruende { getset; }

        public virtual DbSet<tblBase_Feiertage> tblBase_Feiertage { getset; }

        public virtual DbSet<tblBase_Maschinen> tblBase_Maschinen { getset; }

        public virtual DbSet<tblBase_Mitarbeitergruppen> tblBase_Mitarbeitergruppen { getset; }

        public virtual DbSet<tblBase_Schichtmodell> tblBase_Schichtmodell { getset; }

        public virtual DbSet<tblBase_Maschinengruppe> tblBase_Maschinengruppe { getset; }

    }

}