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 { get; set; } public virtual DbSet<tblBase_Feiertage> tblBase_Feiertage { get; set; } public virtual DbSet<tblBase_Maschinen> tblBase_Maschinen { get; set; } public virtual DbSet<tblBase_Mitarbeitergruppen> tblBase_Mitarbeitergruppen { get; set; } public virtual DbSet<tblBase_Schichtmodell> tblBase_Schichtmodell { get; set; } public virtual DbSet<tblBase_Maschinengruppe> tblBase_Maschinengruppe { get; set; } } }
|