Zum Inhalt springen

Balboa44

Mitglieder
  • Gesamte Inhalte

    11
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

  1. Also ich habe jetzt einen Datenbank Zugriff und kann damit arbeiten, aber die Fehlermeldungen sind mir ein Rätsel Danke für eure schnelle Hilfe 🙌
  2. Wenn ich es so mache : $mysqli = new mysqli('localhost', 'root', '', 'Website'); Fatal error: Uncaught Error: Class "mysqli" not found in D:\Programme\xamp\htdocs\GSoftWebsite.php:15 Stack trace: #0 {main} thrown in D:\Programme\xamp\htdocs\GSoftWebsite.php on line 15 Wenn ich die Seite im Browser aufrufe, wird dort kein Fehler mehr angezeigt. Wenn ich es so mache: $pdo = new PDO('mysql:host=localhost;dbname=Website', 'root', ''); Fatal error: Uncaught PDOException: could not find driver in D:\Programme\xamp\htdocs\GSoftWebsite.php:18 Stack trace: #0 D:\Programme\xamp\htdocs\GSoftWebsite.php(18): PDO->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in D:\Programme\xamp\htdocs\GSoftWebsite.php on line 18 Wenn ich die Seite im Browser aufrufe, wird dort kein Fehler mehr angezeigt.
  3. Die Parameter sind erstmal unwichtig, würde ich sagen, weil ich ja gar nicht erst die Klassen finden/benutzen kann. Ich denke, ich würde es später so machen: <?php $pdo = new PDO('mysql:host=localhost;dbname=databasename', 'username', 'password'); ?> aber auch die PDO Klasse wird nicht gefunden Aber vielen Dank, vielleicht hilft mir das später.
  4. Hey, ich möchte meine erste eigene Webseite erstellen. Wenn ich per PHP einen Datenbank Zugang erstellen möchte, bekomme ich die Fehlermeldung: Fatal error: Uncaught Error: Class "mysqli" not found in D:\Programme\xamp\htdocs\GSoftWebsite.php:17 <?php //phpinfo(); $mysqli = new mysqli('mysql:host=localhost;dbname=Website', 'root', ''); ?> Ich habe XAMP installiert und Apache bzw. MySQL aktiviert. Öffne ich die Seite im Browser, steht dort: Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo for mysql failed: Der angegebene Host ist unbekannt. in D:\Programme\xamp\htdocs\GSoftWebsite.php on line 17 Fatal error: Uncaught mysqli_sql_exception: php_network_getaddresses: getaddrinfo for mysql failed: Der angegebene Host ist unbekannt. in D:\Programme\xamp\htdocs\GSoftWebsite.php:17 Stack trace: #0 D:\Programme\xamp\htdocs\GSoftWebsite.php(17): mysqli->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in D:\Programme\xamp\htdocs\GSoftWebsite.php on line 17 Ich google jetzt seit über zwei Wochen und versteh einfach nicht, woran es liegen könnte. Als IDE benutze ich Visual Studio Code. Die Intellisense schlägt mir MySQL Klassen vor, aber kann beim Ausführen, nichts damit anfangen. Hoffe Ihr könnt mir weiterhelfen. Ich bin langsam sehr frustriert. Liebe Grüße Balboa44
  5. Ich habe es geschafft, die Datagrid und die Listbox an eine generische Liste zu binden. Jetzt werden alle Daten aus der Datenbank angezeigt. Ich habe jetzt probiert, einen angeklickten Datensatz aus der Datagrid/Listbox an die Textboxen zu binden, aber leider gelingt mir das nur, indem ich DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.KundenNummerPK definiere. Jetzt ist die Textbox an die Datagrid gebunden, sollte aber lieber an die Liste gebunden werden. Ich möchte im Endeffekt, dass ich die Kunden in der Listbox/Datagrid auswählen und deren Daten in den Textboxen automatisch verändern kann. Hat jemand vielleicht eine Idee, was ich machen könnte? Am besten mit Code Beispielen. Und danke KeeperOfCoffee für den Hinweis. 👍 MainWindow.xaml <Window x:Class="..._Kunden.MainWindow" 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:..._Kunden" mc:Ignorable="d" Title="MainWindow" Height="679.747" Width="1353.764" WindowStartupLocation="CenterScreen"> <Window.DataContext> <local:KundenDatenViewModel/> </Window.DataContext> <Grid Background="#FF434751" Margin="0,0,-6.8,0.4"> <Label x:Name="labelKundenNummerPK" Content="Kunden Nummer PK:" HorizontalAlignment="Left" Margin="858,6,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxKundenNummerPK" HorizontalAlignment="Left" Height="24" Margin="865,41,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" IsEnabled="False" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.KundenNummerPK , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelOffeneVorgaenge" Content="Offene Vorgänge:" HorizontalAlignment="Left" Margin="858,61,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneVorgaenge" HorizontalAlignment="Left" Height="24" Margin="865,97,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.OffeneVorgaenge , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelKundenBruttopreise" Content="Bruttopreise:" HorizontalAlignment="Left" Margin="858,115,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBruttopreise" HorizontalAlignment="Left" Height="24" Margin="865,149,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Bruttopreise , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelOffenePosten" Content="Offene Posten:" HorizontalAlignment="Left" Margin="858,170,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffenePosten" HorizontalAlignment="Left" Height="24" Margin="865,205,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.OffenePosten , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelTransportweg" Content="Transportweg:" HorizontalAlignment="Left" Margin="858,225,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneTransportweg" HorizontalAlignment="Left" Height="24" Margin="865,260,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Transportweg , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelPreis" Content="Preis:" HorizontalAlignment="Left" Margin="858,280,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxPreis" HorizontalAlignment="Left" Height="24" Margin="865,316,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Preis , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelVersandanschrift_" Content="Versandanschrift:" HorizontalAlignment="Left" Margin="858,336,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersandanschrift" HorizontalAlignment="Left" Height="24" Margin="865,370,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Versandanschrift , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelVersicherung" Content="Versicherung:" HorizontalAlignment="Left" Margin="858,391,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersicherung" HorizontalAlignment="Left" Height="24" Margin="865,426,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Versicherung , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelBenutzer" Content="Benutzer:" HorizontalAlignment="Left" Margin="858,442,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBenutzer" HorizontalAlignment="Left" Height="24" Margin="865,476,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Benutzer , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Label x:Name="labelZeit" Content="Zeit:" HorizontalAlignment="Left" Margin="858,497,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxZeit" HorizontalAlignment="Left" Height="24" Margin="865,532,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" DataContext="{Binding ListeKundenDaten}" Text="{Binding ElementName=dataGrid, Path=SelectedItem.Zeit , Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> <Button x:Name="buttonSpeichern" Content="Speichern" HorizontalAlignment="Left" Margin="260,593,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonSpeichern_Click" IsEnabled="False"/> <Button x:Name="buttonLoeschen" Content="Löschen" HorizontalAlignment="Left" Margin="1251,561,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonLoeschen_Click"/> <Button x:Name="buttonBearbeiten" Content="Bearbeiten" HorizontalAlignment="Left" Margin="1171,561,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonBearbeiten_Click"/> <Button x:Name="buttonClearListBoxUndTextBoxen" Content="Clear" HorizontalAlignment="Left" Margin="1251,591,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonClearListBoxUndTextBoxen_Click"/> <Label x:Name="labelListBoxUndTextBoxenClear" Content="Listbox und Textboxen:" HorizontalAlignment="Left" Margin="965,585,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <Button x:Name="buttonReload" Content="Reload" HorizontalAlignment="Left" Margin="1171,591,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonReload_Click"/> <RadioButton x:Name="radioButtonKundenNrPK" Content="Neuen Kunden erstellen" HorizontalAlignment="Left" Margin="27,593,0,0" VerticalAlignment="Top" FontSize="18" FontWeight="Bold" Checked="RadioButtonKundenNrPK_Checked" Unchecked="RadioButtonKundenNrPK_Unchecked" Foreground="White"/> <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="278" Margin="27,28,0,0" VerticalAlignment="Top" Width="812" Background="#FF354D93" SelectionChanged="ListBox_SelectionChanged" FontWeight="Bold" Foreground="White" ItemsSource="{Binding ListeKundenDaten, UpdateSourceTrigger=PropertyChanged}"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Vertical" IsItemsHost="True" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="0 0 10 0"> <TextBlock Text="{Binding KundenNummerPK, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0" /> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding OffeneVorgaenge, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Bruttopreise, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding OffenePosten, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Transportweg, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Preis, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Versandanschrift, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Versicherung, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Benutzer, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> <TextBlock Text="|" Margin="0 0 10 0"/> <TextBlock Text="{Binding Zeit, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 10 0"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Height="278" Margin="27,310,0,0" VerticalAlignment="Top" Width="812" Background="#FF354D93" Foreground="Black" AutoGenerateColumns="False" ItemsSource="{Binding ListeKundenDaten, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="DataGrid_SelectionChanged"> <DataGrid.Columns> <DataGridTextColumn Header="KundenNummerPK" Binding="{Binding KundenNummerPK, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="OffeneVorgaenge" Binding="{Binding OffeneVorgaenge, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Bruttopreise" Binding="{Binding Bruttopreise, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="OffenePosten" Binding="{Binding OffenePosten, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Transportweg" Binding="{Binding Transportweg, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Preis" Binding="{Binding Preis, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Versandanschrift" Binding="{Binding Versandanschrift, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Versicherung" Binding="{Binding Versicherung, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Benutzer" Binding="{Binding Benutzer, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Zeit" Binding="{Binding Zeit, UpdateSourceTrigger=PropertyChanged}"/> </DataGrid.Columns> </DataGrid> </Grid> </Window> MainWindow.xaml.cs (Ganz unten im Code steht die komplette Aufgabenstellung als Kommentar) using System.Windows; using System.Windows.Controls; namespace MLAN_Kunden { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); KundenDatenViewModel kundenDatenViewModel = new KundenDatenViewModel(); kundenDatenViewModel.LadeDatenInsKundenDatenViewmodel(); DataContext = kundenDatenViewModel; } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (listBox.SelectedIndex != -1) { KundenDatenViewModel kundenDatenViewModel = new KundenDatenViewModel(); kundenDatenViewModel.test(listBox.SelectedIndex); this.DataContext = kundenDatenViewModel; } } private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { } private void ButtonSpeichern_Click(object sender, RoutedEventArgs e) { } private void ButtonBearbeiten_Click(object sender, RoutedEventArgs e) { } private void ButtonLoeschen_Click(object sender, RoutedEventArgs e) { } private void ButtonClearListBoxUndTextBoxen_Click(object sender, RoutedEventArgs e) { } private void ButtonReload_Click(object sender, RoutedEventArgs e) { } private void RadioButtonKundenNrPK_Checked(object sender, RoutedEventArgs e) { } private void RadioButtonKundenNrPK_Unchecked(object sender, RoutedEventArgs e) { } } } /* In der ... können u.a. Kundendaten verwaltet werden. Es soll eine Applikation erstellt werden, die die Kundendaten in eine Liste/Tabelle anzeigt und mit der die Kundendaten bearbeitet werden können. Links soll die Tabelle/Liste mit allen Kunden zu sehen sein und rechts die einzelnen Eingabefelder für einen Kundendatensatz. Wir links in der Tabelle ein Kundendatensatz ausgewählt, so sind die Daten rechts in den Eingabecontrols zu sehen und können bei Bedarf geändert und gespeichert werden. Die Kundennummer (Primärschlüssel) darf nicht geändert werden, da dieser von der Datenbank verwaltet wird. Die Tabelle in der Datenbank heißt "Kunden". Der Primärschlüssel/Kundennummer heißt "KDNUMMER". Es müssen nicht alle Tabellenfelder in der Tabelle und rechts zhur Bearbeitung angezeigt werden, 10 Felder sollen ausreichend sein. Es ist die Datenbank aus Aufgabe2 zu verwenden. Die einzelnen Tabellenfelder sind in der Datei Table_Kunden.txt beschrieben. Es ist sich auch mit folgenden Git-Befehlen/Funktionen (Team-Explorer in Visual Studio) zu beschäftigen: - Fetch (Abrufen) - Pull (Remote-Änderungen in die lokale Arbeitskopie übernehmen/überspielen) - Commit - Push ---------------------------------------------------------------------------------------------------------- Datenbindung Model -> ViewModel -> View Ziel: Es sollen sämtliche direkten Verweise auf die Controls (ListBox, TextBox, etc.) in den Klassen entfernt werden und die Zuweisung der einzelnen Kundendaten durch Datenbindung der Properties erreicht werden. Beispiel: statt textBoxName.Text = "Gerd" wird geschrieben kunde.Name = "Gerd". kunde ist hier das Objekt der Model-Klasse "Kunde" und besitzt die Property "Name". Diese Property wird an die Text-Property der TextBox in der View (XAML) gebunden. Der ListBox werden nicht einzeln die Items durch die hinzugefügt (listBox.Items.Add(...)), sondern an eine List von Kunden gebunden. Benötigt wird die Model-Klasse für einen bzw. die Kunden (hier schon vorhanden in KundenDaten.cs). Eine generische List zur Bindung der aller Kundendaten an die ListBox. MVVM Design pattern (Entwurfsmuster): https://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_28_005.html DataTable belegeDaten = new DataTable(); ViewModel holt Kundendaten aus der Datenbank und erhält somit eine generische Liste mit den Kundendatensätzen --> List<KundenDaten> Die Liste wird an die ItemsSource der ListBox bzw. der Tabelle gebunden (DataGrid). KundenDatenViewModel besitzt eine Initial-Methode zum Holen der Datensätze über die Datenbankklasse. MainWindow.xaml.cs var kundenDatenViewModel = new KundenDatenViewModel(); KundenDatenViewModel.Init(); this.DataContext = KundenDatenViewModel; Im DataGrid die Spalten (Columns) einzeln definieren und an die jeweilige Eigenschaft des Kunden-Model binden (pro Kunden-Property eine Spalte). */ KundenViewModel.cs using System.Collections.Generic; using System.ComponentModel; namespace ..._Kunden { class KundenDatenViewModel : INotifyPropertyChanged { private Datenbank datenbank = new Datenbank(); public event PropertyChangedEventHandler PropertyChanged; private List<KundenDaten> listeKundenDaten = new List<KundenDaten>(); private string kundenNummerPK; private string offeneVorgaenge; private string bruttopreise; private string offenePosten; private string transportweg; private string preis; private string versandanschrift; private string versicherung; private string benutzer; private string zeit; public List<KundenDaten> ListeKundenDaten { get { return listeKundenDaten; } set { if (listeKundenDaten == value) return; listeKundenDaten = value; OnPropertyChanged("ListeKundenDaten"); } } public string KundenNummerPK { get { return kundenNummerPK; } set { if (kundenNummerPK == value) return; kundenNummerPK = value; OnPropertyChanged("KundenNummerPK"); } } public string OffeneVorgaenge { get { return offeneVorgaenge; } set { if (offeneVorgaenge == value) return; offeneVorgaenge = value; OnPropertyChanged("OffeneVorgaenge"); } } public string Bruttopreise { get { return bruttopreise; } set { if (bruttopreise == value) return; bruttopreise = value; OnPropertyChanged("Bruttopreise"); } } public string OffenePosten { get { return offenePosten; } set { if (offenePosten == value) return; offenePosten = value; OnPropertyChanged("OffenePosten"); } } public string Transportweg { get { return transportweg; } set { if (transportweg == value) return; transportweg = value; OnPropertyChanged("Transportweg"); } } public string Preis { get { return preis; } set { if (preis == value) return; preis = value; OnPropertyChanged("Preis"); } } public string Versandanschrift { get { return versandanschrift; } set { if (versandanschrift == value) return; versandanschrift = value; OnPropertyChanged("Versandanschrift"); } } public string Versicherung { get { return versicherung; } set { if (versicherung == value) return; versicherung = value; OnPropertyChanged("Versicherung"); } } public string Benutzer { get { return benutzer; } set { if (benutzer == value) return; benutzer = value; OnPropertyChanged("Benutzer"); } } public string Zeit { get { return zeit; } set { if (zeit == value) return; zeit = value; OnPropertyChanged("Zeit"); } } protected internal void OnPropertyChanged(string propertyname) { PropertyChangedEventHandler propertyChanged = PropertyChanged; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyname)); } } public void LadeDatenInsKundenDatenViewmodel() { listeKundenDaten = datenbank.KundenLesenNew(); } public List<KundenDaten> test(int index) { listeKundenDaten = datenbank.KundenLesenNew(); listeKundenDaten.Add( new KundenDaten { KundenNummerPK = listeKundenDaten[index].KundenNummerPK, OffeneVorgaenge = listeKundenDaten[index].OffeneVorgaenge, Bruttopreise = listeKundenDaten[index].Bruttopreise, OffenePosten = listeKundenDaten[index].OffenePosten, Transportweg = listeKundenDaten[index].Transportweg, Preis = listeKundenDaten[index].Preis, Versandanschrift = listeKundenDaten[index].Versandanschrift, Versicherung = listeKundenDaten[index].Versicherung, Benutzer = listeKundenDaten[index].Benutzer, Zeit = listeKundenDaten[index].Zeit }); return listeKundenDaten; } } } KundenDaten.cs using System.Collections.Generic; namespace ..._Kunden { public class KundenDaten { public List<KundenDaten> ListeKundenDaten; public string KundenNummerPK { get; set; } public string OffeneVorgaenge { get; set; } public string Bruttopreise { get; set; } public string OffenePosten { get; set; } public string Transportweg { get; set; } public string Preis { get; set; } public string Versandanschrift { get; set; } public string Versicherung { get; set; } public string Benutzer { get; set; } public string Zeit { get; set; } public KundenDaten() { } public string GetCSVSatz() { string getCSVSatzString; getCSVSatzString = KundenNummerPK + " / " + OffeneVorgaenge + " / " + Bruttopreise + " / " + OffenePosten + " / " + Transportweg + " / " + Preis + " / " + Versandanschrift + " / " + Versicherung + " / " + Benutzer + " / " + Zeit + "\n"; //getCSVSatzString = KundenNummerPK + ";" + OffeneVorgaenge + ";" + Bruttopreise + ";" + OffenePosten + ";" + Transportweg + ";" + Preis + ";" + Versandanschrift + ";" + Versicherung + ";" + Benutzer + ";" + Zeit + ";"; return getCSVSatzString; } } } Datenbank.cs using System.Collections.Generic; using System.Data; using System.Data.SqlClient; namespace ..._Kunden { class Datenbank { public readonly string sqlPath = "SERVER=...;DATABASE=...;UID=...;PASSWORD='...';"; public DataTable dataTable = new DataTable(); private List<KundenDaten> listeKundenDaten = new List<KundenDaten>(); public Datenbank() { } public List<KundenDaten> KundenLesenNew() { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); using (SqlCommand sqlCommand = new SqlCommand("SELECT KDNUMMER, KDOPVA, KDBRUTTO, KDOPRG, KDEMTRWEG, KDPREISKZ, KDVANUMMER, KDVERSICH, KDWSNAME, KDWSZEIT FROM KUNDEN ORDER BY KDNUMMER", sqlConnection)) { SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand); sqlDataAdapter.Fill(dataTable); foreach (DataRow dataRow in dataTable.Rows) { listeKundenDaten.Add( new KundenDaten { KundenNummerPK = dataRow["KDNUMMER"].ToString(), OffeneVorgaenge = dataRow["KDOPVA"].ToString(), Bruttopreise = dataRow["KDBRUTTO"].ToString(), OffenePosten = dataRow["KDOPRG"].ToString(), Transportweg = dataRow["KDEMTRWEG"].ToString(), Preis = dataRow["KDPREISKZ"].ToString(), Versandanschrift = dataRow["KDVANUMMER"].ToString(), Versicherung = dataRow["KDVERSICH"].ToString(), Benutzer = dataRow["KDWSNAME"].ToString(), Zeit = dataRow["KDWSZEIT"].ToString() }); foreach (KundenDaten kundenDaten in listeKundenDaten) { } } return listeKundenDaten; } } } public void KundenDatenBearbeiten(KundenDatenViewModel kundenDatenViewModel) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); string sqlAnweisung; SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlAnweisung = string.Format("UPDATE KUNDEN SET KDNUMMER = '{0}', KDOPVA = '{1}', KDBRUTTO = '{2}', KDOPRG = '{3}', " + "KDEMTRWEG = '{4}', KDPREISKZ = '{5}', KDVANUMMER = '{6}', KDVERSICH = '{7}', KDWSNAME = '{8}', KDWSZEIT = '{9}' ", kundenDatenViewModel.KundenNummerPK, kundenDatenViewModel.OffeneVorgaenge.Replace(",", "."), kundenDatenViewModel.Bruttopreise, kundenDatenViewModel.OffenePosten.Replace(",", "."), kundenDatenViewModel.Transportweg, kundenDatenViewModel.Preis, kundenDatenViewModel.Versandanschrift, kundenDatenViewModel.Versicherung, kundenDatenViewModel.Benutzer, kundenDatenViewModel.Zeit); sqlAnweisung += string.Format("WHERE KDNUMMER = '{0}';", kundenDatenViewModel.KundenNummerPK); sqlCommand.CommandText = sqlAnweisung; sqlCommand.ExecuteNonQuery(); sqlConnection.Close(); } } } } Logik.cs using System.Windows.Controls; namespace ..._Kunden { class Logik { public Logik() { } public void ListBoxTextBoxenClear(ListBox listBox, TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit) { listBox.Items.Clear(); textBoxKundenNummerPK.Text = ""; textBoxOffeneVorgaenge.Text = ""; textBoxBruttopreise.Text = ""; textBoxOffenePosten.Text = ""; textBoxTransportweg.Text = ""; textBoxPreis.Text = ""; textBoxVersandanschrift.Text = ""; textBoxVersicherung.Text = ""; textBoxBenutzer.Text = ""; textBoxZeit.Text = ""; } public void NurTextBoxenClear(TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit) { textBoxKundenNummerPK.Text = ""; textBoxOffeneVorgaenge.Text = ""; textBoxBruttopreise.Text = ""; textBoxOffenePosten.Text = ""; textBoxTransportweg.Text = ""; textBoxPreis.Text = ""; textBoxVersandanschrift.Text = ""; textBoxVersicherung.Text = ""; textBoxBenutzer.Text = ""; textBoxZeit.Text = ""; } } }
  6. Ja handelt es sich. Ich muss die Aufgabe jedenfalls lösen.
  7. Aufgabe: In der ... können u.a. Kundendaten verwaltet werden. Es soll eine Applikation erstellt werden, die die Kundendaten in eine Liste/Tabelle anzeigt und mit der die Kundendaten bearbeitet werden können. Links soll die Tabelle/Liste mit allen Kunden zu sehen sein und rechts die einzelnen Eingabefelder für einen Kundendatensatz. Wir links in der Tabelle ein Kundendatensatz ausgewählt, so sind die Daten rechts in den Eingabecontrols zu sehen und können bei Bedarf geändert und gespeichert werden. Die Kundennummer (Primärschlüssel) darf nicht geändert werden, da dieser von der Datenbank verwaltet wird. Die Tabelle in der Datenbank heißt "Kunden". Der Primärschlüssel/Kundennummer heißt "KDNUMMER". Es müssen nicht alle Tabellenfelder in der Tabelle und rechts zur Bearbeitung angezeigt werden, 10 Felder sollen ausreichend sein. Die Aufgabe habe ich so gelöst: MainWindow.xaml: <Window x:Class="... .MainWindow" 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:MLAN_Kunden" mc:Ignorable="d" Title="MainWindow" Height="679.747" Width="1001.764" WindowStartupLocation="CenterScreen"> <Grid Background="#FF434751"> <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="550" Margin="27,28,0,0" VerticalAlignment="Top" Width="434" Background="#FF354D93" SelectionChanged="ListBox_SelectionChanged" FontWeight="Bold" Foreground="White"/> <Label x:Name="labelKundenNummerPK" Content="Kunden Nummer PK:" HorizontalAlignment="Left" Margin="498,28,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxKundenNummerPK" HorizontalAlignment="Left" Height="24" Margin="504,62,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" IsEnabled="False"/> <Label x:Name="labelOffeneVorgaenge" Content="Offene Vorgänge:" HorizontalAlignment="Left" Margin="498,83,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneVorgaenge" HorizontalAlignment="Left" Height="24" Margin="504,118,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelKundenBruttopreise" Content="Bruttopreise:" HorizontalAlignment="Left" Margin="498,137,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBruttopreise" HorizontalAlignment="Left" Height="24" Margin="504,171,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelOffenePosten" Content="Offene Posten:" HorizontalAlignment="Left" Margin="498,192,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffenePosten" HorizontalAlignment="Left" Height="24" Margin="504,227,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelTransportweg" Content="Transportweg:" HorizontalAlignment="Left" Margin="498,247,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneTransportweg" HorizontalAlignment="Left" Height="24" Margin="504,282,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelPreis" Content="Preis:" HorizontalAlignment="Left" Margin="498,302,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxPreis" HorizontalAlignment="Left" Height="24" Margin="504,338,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelVersandanschrift_" Content="Versandanschrift:" HorizontalAlignment="Left" Margin="498,358,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersandanschrift" HorizontalAlignment="Left" Height="24" Margin="504,392,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelVersicherung" Content="Versicherung:" HorizontalAlignment="Left" Margin="498,413,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersicherung" HorizontalAlignment="Left" Height="24" Margin="504,448,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelBenutzer" Content="Benutzer:" HorizontalAlignment="Left" Margin="498,464,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBenutzer" HorizontalAlignment="Left" Height="24" Margin="504,498,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Label x:Name="labelZeit" Content="Zeit:" HorizontalAlignment="Left" Margin="498,519,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxZeit" HorizontalAlignment="Left" Height="24" Margin="504,554,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold"/> <Button x:Name="buttonSpeichern" Content="Speichern" HorizontalAlignment="Left" Margin="260,588,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonSpeichern_Click" IsEnabled="False"/> <Button x:Name="buttonLoeschen" Content="Löschen" HorizontalAlignment="Left" Margin="891,583,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonLoeschen_Click"/> <Button x:Name="buttonBearbeiten" Content="Bearbeiten" HorizontalAlignment="Left" Margin="811,583,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonBearbeiten_Click"/> <Button x:Name="buttonClearListBoxUndTextBoxen" Content="Clear" HorizontalAlignment="Left" Margin="891,613,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonClearListBoxUndTextBoxen_Click"/> <Label x:Name="labelListBoxUndTextBoxenClear" Content="Listbox und Textboxen:" HorizontalAlignment="Left" Margin="605,607,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <Button x:Name="buttonReload" Content="Reload" HorizontalAlignment="Left" Margin="811,613,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonReload_Click"/> <RadioButton x:Name="radioButtonKundenNrPK" Content="Neuen Kunden erstellen" HorizontalAlignment="Left" Margin="27,588,0,0" VerticalAlignment="Top" FontSize="18" FontWeight="Bold" Checked="radioButtonKundenNrPK_Checked" Unchecked="radioButtonKundenNrPK_Unchecked" Foreground="White"/> </Grid> </Window> MainWindow.xaml.cs: using System.Windows; using System.Windows.Controls; namespace ..._Kunden { public partial class MainWindow : Window { private Datenbank datenbank = new Datenbank(); private Logik logik = new Logik(); public MainWindow() { InitializeComponent(); datenbank.KundenLesen(listBox); } private void ButtonSpeichern_Click(object sender, RoutedEventArgs e) { KundenDaten kundenDaten = new KundenDaten(textBoxKundenNummerPK.Text, textBoxOffeneVorgaenge.Text, textBoxBruttopreise.Text, textBoxOffenePosten.Text, textBoxOffeneTransportweg.Text, textBoxPreis.Text, textBoxVersandanschrift.Text, textBoxVersicherung.Text, textBoxBenutzer.Text, textBoxZeit.Text); datenbank.NeuenKundenSpeichern(kundenDaten, listBox); datenbank.KundenLesen(listBox); } private void ButtonBearbeiten_Click(object sender, RoutedEventArgs e) { KundenDaten kundenDaten = new KundenDaten(textBoxKundenNummerPK.Text, textBoxOffeneVorgaenge.Text, textBoxBruttopreise.Text, textBoxOffenePosten.Text, textBoxOffeneTransportweg.Text, textBoxPreis.Text, textBoxVersandanschrift.Text, textBoxVersicherung.Text, textBoxBenutzer.Text, textBoxZeit.Text); datenbank.KundenDatenBearbeiten(kundenDaten, listBox); datenbank.KundenLesen(listBox); } private void ButtonLoeschen_Click(object sender, RoutedEventArgs e) { datenbank.KundenDatenLoeschen(listBox); datenbank.KundenLesen(listBox); } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (listBox.SelectedIndex != -1) { datenbank.LadeDatenInTextboxen(textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit, listBox.SelectedIndex, listBox); } } private void ButtonClearListBoxUndTextBoxen_Click(object sender, RoutedEventArgs e) { logik.ListBoxTextBoxenClear(listBox, textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); } private void ButtonReload_Click(object sender, RoutedEventArgs e) { logik.ListBoxTextBoxenClear(listBox, textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); datenbank.KundenLesen(listBox); } private void radioButtonKundenNrPK_Checked(object sender, RoutedEventArgs e) { textBoxKundenNummerPK.IsEnabled = true; buttonSpeichern.IsEnabled = true; logik.NurTextBoxenClear(textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); } private void radioButtonKundenNrPK_Unchecked(object sender, RoutedEventArgs e) { textBoxKundenNummerPK.IsEnabled = false; buttonSpeichern.IsEnabled = false; } } } KundenDaten.cs: namespace ..._Kunden { class KundenDaten { public string KundenNummerPK { get; set; } public string OffeneVorgaenge { get; set; } public string Bruttopreise { get; set; } public string OffenePosten { get; set; } public string Transportweg { get; set; } public string Preis { get; set; } public string Versandanschrift { get; set; } public string Versicherung { get; set; } public string Benutzer { get; set; } public string Zeit { get; set; } public KundenDaten(string strKundenNummerPK, string strOffeneVorgaenge, string strBruttopreise, string strOffenePosten, string strTransportweg, string strPreis, string strVersandanschrift, string strVersicherung, string strBenutzer, string strZeit) { KundenNummerPK = strKundenNummerPK; OffeneVorgaenge = strOffeneVorgaenge; Bruttopreise = strBruttopreise; OffenePosten = strOffenePosten; Transportweg = strTransportweg; Preis = strPreis; Versandanschrift = strVersandanschrift; Versicherung = strVersicherung; Benutzer = strBenutzer; Zeit = strZeit; } public string GetCSVSatz() { string s; s = KundenNummerPK + " / " + OffeneVorgaenge + " / " + Bruttopreise + " / " + OffenePosten + " / " + Transportweg + " / " + Preis + " / " + Versandanschrift + " / " + Versicherung + " / " + Benutzer + " / " + Zeit + "\n"; //s = KundenNummerPK + ";" + OffeneVorgaenge + ";" + Bruttopreise + ";" + OffenePosten + ";" + Transportweg + ";" + Preis + ";" + Versandanschrift + ";" + Versicherung + ";" + Benutzer + ";" + Zeit + ";"; return s; } } } Datenbank.cs: using System.Collections.Generic; using System.Data.SqlClient; using System.Windows.Controls; namespace ..._Kunden { class Datenbank { private readonly string sqlPath = "SERVER=...;DATABASE=...;UID=...;PASSWORD='...';"; private List<KundenDaten> listeKundenDaten = new List<KundenDaten>(); public Datenbank() { } public void KundenLesen(ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); listeKundenDaten.Clear(); listBox.Items.Clear(); using (SqlCommand command = new SqlCommand("SELECT * FROM KUNDEN ORDER BY KDNUMMER", sqlConnection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { listeKundenDaten.Add( new KundenDaten( reader["KDNUMMER"].ToString(), //KundenNummer PK reader["KDOPVA"].ToString(), //Offene Vorgaenge reader["KDBRUTTO"].ToString(), //Bruttopreise reader["KDOPRG"].ToString(), //Offene Posten reader["KDEMTRWEG"].ToString(), //Transportweg reader["KDPREISKZ"].ToString(), //Preis reader["KDVANUMMER"].ToString(), //Versandanschrift reader["KDVERSICH"].ToString(), //Versicherung reader["KDWSNAME"].ToString(), //Benutzer reader["KDWSZEIT"].ToString() //Zeit )); } } } } foreach (KundenDaten kundenDaten in listeKundenDaten) { listBox.Items.Add(kundenDaten.GetCSVSatz()); } } public void NeuenKundenSpeichern(KundenDaten kundenDaten, ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); string sqlAnweisung; SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlAnweisung = string.Format("INSERT INTO KUNDEN(KDNUMMER, KDOPVA, KDBRUTTO, KDOPRG, KDEMTRWEG, KDPREISKZ, KDVANUMMER, KDVERSICH, KDWSNAME, KDWSZEIT) VALUES ( '{0}', '{1}', '{2}','{3}', '{4}', '{5}', '{6}','{7}','{8}','{9}');", kundenDaten.KundenNummerPK, kundenDaten.OffeneVorgaenge.Replace(",", "."), kundenDaten.Bruttopreise, kundenDaten.OffenePosten.Replace(",", "."), kundenDaten.Transportweg, kundenDaten.Preis, kundenDaten.Versandanschrift, kundenDaten.Versicherung, kundenDaten.Benutzer, kundenDaten.Zeit); sqlCommand.CommandText = sqlAnweisung; sqlCommand.ExecuteNonQuery(); } } public void KundenDatenBearbeiten(KundenDaten kundenDaten, ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); string sqlAnweisung; SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlAnweisung = string.Format("UPDATE KUNDEN SET KDNUMMER = '{0}', KDOPVA = '{1}', KDBRUTTO = '{2}', KDOPRG = '{3}', " + "KDEMTRWEG = '{4}', KDPREISKZ = '{5}', KDVANUMMER = '{6}', KDVERSICH = '{7}', KDWSNAME = '{8}', KDWSZEIT = '{9}' ", kundenDaten.KundenNummerPK, kundenDaten.OffeneVorgaenge.Replace(",", "."), kundenDaten.Bruttopreise, kundenDaten.OffenePosten.Replace(",", "."), kundenDaten.Transportweg, kundenDaten.Preis, kundenDaten.Versandanschrift, kundenDaten.Versicherung, kundenDaten.Benutzer, kundenDaten.Zeit); sqlAnweisung += string.Format("WHERE KDNUMMER = '{0}';", kundenDaten.KundenNummerPK); sqlCommand.CommandText = sqlAnweisung; sqlCommand.ExecuteNonQuery(); sqlConnection.Close(); } } public void KundenDatenLoeschen(ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlCommand.CommandText = "DELETE FROM KUNDEN " + "WHERE KDNUMMER = " + listBox.SelectedIndex.ToString() + ";"; sqlCommand.ExecuteNonQuery(); sqlConnection.Close(); } } public void LadeDatenInTextboxen(TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit, int index, ListBox listBox) { textBoxKundenNummerPK.Text = listeKundenDaten[index].KundenNummerPK; textBoxOffeneVorgaenge.Text = listeKundenDaten[index].OffeneVorgaenge; textBoxBruttopreise.Text = listeKundenDaten[index].Bruttopreise; textBoxOffenePosten.Text = listeKundenDaten[index].OffenePosten; textBoxTransportweg.Text = listeKundenDaten[index].Transportweg; textBoxPreis.Text = listeKundenDaten[index].Preis; textBoxVersandanschrift.Text = listeKundenDaten[index].Versandanschrift; textBoxVersicherung.Text = listeKundenDaten[index].Versicherung; textBoxBenutzer.Text = listeKundenDaten[index].Benutzer; textBoxZeit.Text = listeKundenDaten[index].Zeit; } } } Logik.cs: using System.Windows.Controls; namespace ..._Kunden { class Logik { public Logik() { } public void ListBoxTextBoxenClear(ListBox listBox, TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit) { listBox.Items.Clear(); textBoxKundenNummerPK.Text = ""; textBoxOffeneVorgaenge.Text = ""; textBoxBruttopreise.Text = ""; textBoxOffenePosten.Text = ""; textBoxTransportweg.Text = ""; textBoxPreis.Text = ""; textBoxVersandanschrift.Text = ""; textBoxVersicherung.Text = ""; textBoxBenutzer.Text = ""; textBoxZeit.Text = ""; } public void NurTextBoxenClear(TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit) { textBoxKundenNummerPK.Text = ""; textBoxOffeneVorgaenge.Text = ""; textBoxBruttopreise.Text = ""; textBoxOffenePosten.Text = ""; textBoxTransportweg.Text = ""; textBoxPreis.Text = ""; textBoxVersandanschrift.Text = ""; textBoxVersicherung.Text = ""; textBoxBenutzer.Text = ""; textBoxZeit.Text = ""; } } } Das Programm funktioniert, aber jetzt habe ich folgende extra Aufgabe bekommen: Datenbindung Model -> ViewModel -> View Ziel: Es sollen sämtliche direkten Verweise auf die Controls (ListBox, TextBox, etc.) in den Klassen entfernt werden und die Zuweisung der einzelnen Kundendaten durch Datenbindung der Properties erreicht werden. Beispiel: statt textBoxName.Text = "Gerd" wird geschrieben kunde.Name = "Gerd". kunde ist hier das Objekt der Model-Klasse "Kunde" und besitzt die Property "Name". Diese Property wird an die Text-Property der TextBox in der View (XAML) gebunden. Der ListBox werden nicht einzeln die Items durch die hinzugefügt (listBox.Items.Add(...)), sondern an eine List von Kunden gebunden. Benötigt wird die Model-Klasse für einen bzw. die Kunden (hier schon vorhanden in KundenDaten.cs). Eine generische List zur Bindung der aller Kundendaten an die ListBox. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Ich mache seit einem Monat eine Ausbildung zum Fachinformatiker für Anwendungsentwicklung. Mir fehlen noch viele Grundkenntnisse und die extra Aufgabe kriege ich bis jetzt nicht wirklich gelöst. Ich habe folgendes Beispiel als Hilfe bekommen: https://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_28_005.html Jetzt habe ich eine ViewModelKlasse erstellt und die anderen Klassen verändert bzw. erstmal sehr viel auskommentiert. Die Klassen sehen jetzt so aus: MainWindow.xaml (Ich habe erstmal aus Testzwecken Daten an die Textboxen gebunden. Richtig wäre es, sie an die Listbox zu binden) <Window x:Class="..._Kunden.MainWindow" 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:MLAN_Kunden" mc:Ignorable="d" Title="MainWindow" Height="679.747" Width="1001.764" WindowStartupLocation="CenterScreen"> <Window.DataContext> <local:KundenDaten/> </Window.DataContext> <Grid Background="#FF434751"> <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="550" Margin="27,28,0,0" VerticalAlignment="Top" Width="434" Background="#FF354D93" SelectionChanged="ListBox_SelectionChanged" FontWeight="Bold" Foreground="White" ItemsSource="{Binding KundenNummerPK}"/> <Label x:Name="labelKundenNummerPK" Content="Kunden Nummer PK:" HorizontalAlignment="Left" Margin="498,28,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxKundenNummerPK" HorizontalAlignment="Left" Height="24" Margin="504,62,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" IsEnabled="False" Text="{Binding KundenNummerPK}"/> <Label x:Name="labelOffeneVorgaenge" Content="Offene Vorgänge:" HorizontalAlignment="Left" Margin="498,83,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneVorgaenge" HorizontalAlignment="Left" Height="24" Margin="504,118,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding OffeneVorgaenge}"/> <Label x:Name="labelKundenBruttopreise" Content="Bruttopreise:" HorizontalAlignment="Left" Margin="498,137,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBruttopreise" HorizontalAlignment="Left" Height="24" Margin="504,171,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Bruttopreise}"/> <Label x:Name="labelOffenePosten" Content="Offene Posten:" HorizontalAlignment="Left" Margin="498,192,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffenePosten" HorizontalAlignment="Left" Height="24" Margin="504,227,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding OffenePosten}"/> <Label x:Name="labelTransportweg" Content="Transportweg:" HorizontalAlignment="Left" Margin="498,247,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxOffeneTransportweg" HorizontalAlignment="Left" Height="24" Margin="504,282,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Transportweg}"/> <Label x:Name="labelPreis" Content="Preis:" HorizontalAlignment="Left" Margin="498,302,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxPreis" HorizontalAlignment="Left" Height="24" Margin="504,338,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Preis}"/> <Label x:Name="labelVersandanschrift_" Content="Versandanschrift:" HorizontalAlignment="Left" Margin="498,358,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersandanschrift" HorizontalAlignment="Left" Height="24" Margin="504,392,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Versandanschrift}"/> <Label x:Name="labelVersicherung" Content="Versicherung:" HorizontalAlignment="Left" Margin="498,413,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxVersicherung" HorizontalAlignment="Left" Height="24" Margin="504,448,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Versicherung}"/> <Label x:Name="labelBenutzer" Content="Benutzer:" HorizontalAlignment="Left" Margin="498,464,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxBenutzer" HorizontalAlignment="Left" Height="24" Margin="504,498,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Benutzer}"/> <Label x:Name="labelZeit" Content="Zeit:" HorizontalAlignment="Left" Margin="498,519,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <TextBox x:Name="textBoxZeit" HorizontalAlignment="Left" Height="24" Margin="504,554,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="462" FontWeight="Bold" Text="{Binding Zeit}"/> <Button x:Name="buttonSpeichern" Content="Speichern" HorizontalAlignment="Left" Margin="260,588,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonSpeichern_Click" IsEnabled="False"/> <Button x:Name="buttonLoeschen" Content="Löschen" HorizontalAlignment="Left" Margin="891,583,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonLoeschen_Click"/> <Button x:Name="buttonBearbeiten" Content="Bearbeiten" HorizontalAlignment="Left" Margin="811,583,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonBearbeiten_Click"/> <Button x:Name="buttonClearListBoxUndTextBoxen" Content="Clear" HorizontalAlignment="Left" Margin="891,613,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonClearListBoxUndTextBoxen_Click"/> <Label x:Name="labelListBoxUndTextBoxenClear" Content="Listbox und Textboxen:" HorizontalAlignment="Left" Margin="605,607,0,0" VerticalAlignment="Top" Foreground="White" FontWeight="Bold" FontSize="18"/> <Button x:Name="buttonReload" Content="Reload" HorizontalAlignment="Left" Margin="811,613,0,0" VerticalAlignment="Top" Width="75" Height="25" Background="#FFCB4141" FontWeight="Bold" Foreground="White" Click="ButtonReload_Click"/> <RadioButton x:Name="radioButtonKundenNrPK" Content="Neuen Kunden erstellen" HorizontalAlignment="Left" Margin="27,588,0,0" VerticalAlignment="Top" FontSize="18" FontWeight="Bold" Checked="radioButtonKundenNrPK_Checked" Unchecked="radioButtonKundenNrPK_Unchecked" Foreground="White"/> </Grid> </Window> MainWindow.xaml.cs:(Eigentlich nur fast alles auskommentiert. Das ist neu --> this.DataContext = new MainWindowViewModel(KundenDaten.CreateKundenDaten()); ) using System.Windows; using System.Windows.Controls; namespace ..._Kunden { public partial class MainWindow : Window { private Datenbank datenbank = new Datenbank(); private Logik logik = new Logik(); public MainWindow() { InitializeComponent(); //datenbank.KundenLesen(listBox); this.DataContext = new MainWindowViewModel(KundenDaten.CreateKundenDaten()); } private void ButtonSpeichern_Click(object sender, RoutedEventArgs e) { /* KundenDaten kundenDaten = new KundenDaten(textBoxKundenNummerPK.Text, textBoxOffeneVorgaenge.Text, textBoxBruttopreise.Text, textBoxOffenePosten.Text, textBoxOffeneTransportweg.Text, textBoxPreis.Text, textBoxVersandanschrift.Text, textBoxVersicherung.Text, textBoxBenutzer.Text, textBoxZeit.Text); datenbank.NeuenKundenSpeichern(kundenDaten, listBox); datenbank.KundenLesen(listBox); */ } private void ButtonBearbeiten_Click(object sender, RoutedEventArgs e) { /* KundenDaten kundenDaten = new KundenDaten(textBoxKundenNummerPK.Text, textBoxOffeneVorgaenge.Text, textBoxBruttopreise.Text, textBoxOffenePosten.Text, textBoxOffeneTransportweg.Text, textBoxPreis.Text, textBoxVersandanschrift.Text, textBoxVersicherung.Text, textBoxBenutzer.Text, textBoxZeit.Text); datenbank.KundenDatenBearbeiten(kundenDaten, listBox); datenbank.KundenLesen(listBox); */ } private void ButtonLoeschen_Click(object sender, RoutedEventArgs e) { /* datenbank.KundenDatenLoeschen(listBox); datenbank.KundenLesen(listBox); */ } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { /* if (listBox.SelectedIndex != -1) { datenbank.LadeDatenInTextboxen(textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit, listBox.SelectedIndex, listBox); } */ } private void ButtonClearListBoxUndTextBoxen_Click(object sender, RoutedEventArgs e) { /* logik.ListBoxTextBoxenClear(listBox, textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); */ } private void ButtonReload_Click(object sender, RoutedEventArgs e) { /* logik.ListBoxTextBoxenClear(listBox, textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); datenbank.KundenLesen(listBox); */ } private void radioButtonKundenNrPK_Checked(object sender, RoutedEventArgs e) { /* textBoxKundenNummerPK.IsEnabled = true; buttonSpeichern.IsEnabled = true; logik.NurTextBoxenClear(textBoxKundenNummerPK, textBoxOffeneVorgaenge, textBoxBruttopreise, textBoxOffenePosten, textBoxOffeneTransportweg, textBoxPreis, textBoxVersandanschrift, textBoxVersicherung, textBoxBenutzer, textBoxZeit); */ } private void radioButtonKundenNrPK_Unchecked(object sender, RoutedEventArgs e) { /* textBoxKundenNummerPK.IsEnabled = false; buttonSpeichern.IsEnabled = false; */ } } } KundenDaten.cs: (Hier habe ich nur den Konstrukter entfernt und die Mehtode CreateKundenDaten() erstellt.) using System.ComponentModel; namespace ..._Kunden { public class KundenDaten { public string KundenNummerPK { get; set; } public string OffeneVorgaenge { get; set; } public string Bruttopreise { get; set; } public string OffenePosten { get; set; } public string Transportweg { get; set; } public string Preis { get; set; } public string Versandanschrift { get; set; } public string Versicherung { get; set; } public string Benutzer { get; set; } public string Zeit { get; set; } /* public KundenDaten(string strKundenNummerPK, string strOffeneVorgaenge, string strBruttopreise, string strOffenePosten, string strTransportweg, string strPreis, string strVersandanschrift, string strVersicherung, string strBenutzer, string strZeit) { KundenNummerPK = strKundenNummerPK; OffeneVorgaenge = strOffeneVorgaenge; Bruttopreise = strBruttopreise; OffenePosten = strOffenePosten; Transportweg = strTransportweg; Preis = strPreis; Versandanschrift = strVersandanschrift; Versicherung = strVersicherung; Benutzer = strBenutzer; Zeit = strZeit; } */ public string GetCSVSatz() { string s; s = KundenNummerPK + " / " + OffeneVorgaenge + " / " + Bruttopreise + " / " + OffenePosten + " / " + Transportweg + " / " + Preis + " / " + Versandanschrift + " / " + Versicherung + " / " + Benutzer + " / " + Zeit + "\n"; //s = KundenNummerPK + ";" + OffeneVorgaenge + ";" + Bruttopreise + ";" + OffenePosten + ";" + Transportweg + ";" + Preis + ";" + Versandanschrift + ";" + Versicherung + ";" + Benutzer + ";" + Zeit + ";"; return s; } public static KundenDaten CreateKundenDaten() { return new KundenDaten { KundenNummerPK = "1", OffeneVorgaenge = "22", Bruttopreise = "23", OffenePosten = "24", Transportweg = "25", Preis = "26", Versandanschrift = "27", Versicherung = "28", Benutzer = "Marvin", Zeit = "29" }; } } } MainWindowViewModel.cs: using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ..._Kunden { public class MainWindowViewModel : INotifyPropertyChanged { public KundenDaten _Model; // Konstruktor public MainWindowViewModel(KundenDaten model) { _Model = model; _KundenNummerPK = _Model.KundenNummerPK; _OffeneVorgaenge = _Model.OffeneVorgaenge; _Bruttopreise = _Model.Bruttopreise; _OffenePosten = _Model.OffenePosten; _Transportweg = _Model.Transportweg; _Preis = _Model.Preis; _Versandanschrift = _Model.Versandanschrift; _Versicherung = _Model.Versicherung; _Benutzer = _Model.Benutzer; _Zeit = _Model.Zeit; } // Schnittstellen-Ereignis public event PropertyChangedEventHandler PropertyChanged; protected internal void OnPropertyChanged(string propertyname) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyname)); } // Eigenschaften private string _KundenNummerPK; public string KundenNummerPK { get { return _KundenNummerPK; } set { if (_KundenNummerPK == value) return; _KundenNummerPK = value; OnPropertyChanged("KundenNummerPK"); } } private string _OffeneVorgaenge; public string OffeneVorgaenge { get { return _OffeneVorgaenge; } set { if (_OffeneVorgaenge == value) return; _OffeneVorgaenge = value; OnPropertyChanged("OffeneVorgaenge"); } } private string _Bruttopreise; public string Bruttopreise { get { return _Bruttopreise; } set { if (_Bruttopreise == value) return; _Bruttopreise = value; OnPropertyChanged("Bruttopreise"); } } private string _OffenePosten; public string OffenePosten { get { return _OffenePosten; } set { if (_OffenePosten == value) return; _OffenePosten = value; OnPropertyChanged("OffenePosten"); } } private string _Transportweg; public string Transportweg { get { return _Transportweg; } set { if (_Transportweg == value) return; _Transportweg = value; OnPropertyChanged("Transportweg"); } } private string _Preis; public string Preis { get { return _Preis; } set { if (_Preis == value) return; _Preis = value; OnPropertyChanged("Preis"); } } private string _Versandanschrift; public string Versandanschrift { get { return _Versandanschrift; } set { if (_Versandanschrift == value) return; _Versandanschrift = value; OnPropertyChanged("Versandanschrift"); } } private string _Versicherung; public string Versicherung { get { return _Versicherung; } set { if (_Versicherung == value) return; _Versicherung = value; OnPropertyChanged("Versicherung"); } } private string _Benutzer; public string Benutzer { get { return _Benutzer; } set { if (_Benutzer == value) return; _Benutzer = value; OnPropertyChanged("Benutzer"); } } private string _Zeit; public string Zeit { get { return _Zeit; } set { if (_Zeit == value) return; _Zeit = value; OnPropertyChanged("Zeit"); } } } } Datenbank.cs:(Eigentlich fast alles auskommentiert) using System.Collections.Generic; using System.Data.SqlClient; using System.Windows.Controls; namespace ..._Kunden { class Datenbank { private readonly string sqlPath = "SERVER=...;DATABASE=...;UID=...;PASSWORD='...';"; private List<KundenDaten> listeKundenDaten = new List<KundenDaten>(); public Datenbank() { } /* public void KundenLesen(ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); listeKundenDaten.Clear(); listBox.Items.Clear(); using (SqlCommand command = new SqlCommand("SELECT * FROM KUNDEN ORDER BY KDNUMMER", sqlConnection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { listeKundenDaten.Add( new KundenDaten( reader["KDNUMMER"].ToString(), //KundenNummer PK reader["KDOPVA"].ToString(), //Offene Vorgaenge reader["KDBRUTTO"].ToString(), //Bruttopreise reader["KDOPRG"].ToString(), //Offene Posten reader["KDEMTRWEG"].ToString(), //Transportweg reader["KDPREISKZ"].ToString(), //Preis reader["KDVANUMMER"].ToString(), //Versandanschrift reader["KDVERSICH"].ToString(), //Versicherung reader["KDWSNAME"].ToString(), //Benutzer reader["KDWSZEIT"].ToString() //Zeit )); } } } } foreach (KundenDaten kundenDaten in listeKundenDaten) { listBox.Items.Add(kundenDaten.GetCSVSatz()); } } public void NeuenKundenSpeichern(KundenDaten kundenDaten, ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); string sqlAnweisung; SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlAnweisung = string.Format("INSERT INTO KUNDEN(KDNUMMER, KDOPVA, KDBRUTTO, KDOPRG, KDEMTRWEG, KDPREISKZ, KDVANUMMER, KDVERSICH, KDWSNAME, KDWSZEIT) VALUES ( '{0}', '{1}', '{2}','{3}', '{4}', '{5}', '{6}','{7}','{8}','{9}');", kundenDaten.KundenNummerPK, kundenDaten.OffeneVorgaenge.Replace(",", "."), kundenDaten.Bruttopreise, kundenDaten.OffenePosten.Replace(",", "."), kundenDaten.Transportweg, kundenDaten.Preis, kundenDaten.Versandanschrift, kundenDaten.Versicherung, kundenDaten.Benutzer, kundenDaten.Zeit); sqlCommand.CommandText = sqlAnweisung; sqlCommand.ExecuteNonQuery(); } } public void KundenDatenBearbeiten(KundenDaten kundenDaten, ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); string sqlAnweisung; SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlAnweisung = string.Format("UPDATE KUNDEN SET KDNUMMER = '{0}', KDOPVA = '{1}', KDBRUTTO = '{2}', KDOPRG = '{3}', " + "KDEMTRWEG = '{4}', KDPREISKZ = '{5}', KDVANUMMER = '{6}', KDVERSICH = '{7}', KDWSNAME = '{8}', KDWSZEIT = '{9}' ", kundenDaten.KundenNummerPK, kundenDaten.OffeneVorgaenge.Replace(",", "."), kundenDaten.Bruttopreise, kundenDaten.OffenePosten.Replace(",", "."), kundenDaten.Transportweg, kundenDaten.Preis, kundenDaten.Versandanschrift, kundenDaten.Versicherung, kundenDaten.Benutzer, kundenDaten.Zeit); sqlAnweisung += string.Format("WHERE KDNUMMER = '{0}';", kundenDaten.KundenNummerPK); sqlCommand.CommandText = sqlAnweisung; sqlCommand.ExecuteNonQuery(); sqlConnection.Close(); } } public void KundenDatenLoeschen(ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); SqlCommand sqlCommand = sqlConnection.CreateCommand(); sqlCommand.CommandText = "DELETE FROM KUNDEN " + "WHERE KDNUMMER = " + listBox.SelectedIndex.ToString() + ";"; sqlCommand.ExecuteNonQuery(); sqlConnection.Close(); } } public void LadeDatenInTextboxen(TextBox textBoxKundenNummerPK, TextBox textBoxOffeneVorgaenge, TextBox textBoxBruttopreise, TextBox textBoxOffenePosten, TextBox textBoxTransportweg, TextBox textBoxPreis, TextBox textBoxVersandanschrift, TextBox textBoxVersicherung, TextBox textBoxBenutzer, TextBox textBoxZeit, int index, ListBox listBox) { //Aufgabe: Parameter als objekt übergeben! Aber ich weiß nicht wie.. textBoxKundenNummerPK.Text = listeKundenDaten[index].KundenNummerPK; textBoxOffeneVorgaenge.Text = listeKundenDaten[index].OffeneVorgaenge; textBoxBruttopreise.Text = listeKundenDaten[index].Bruttopreise; textBoxOffenePosten.Text = listeKundenDaten[index].OffenePosten; textBoxTransportweg.Text = listeKundenDaten[index].Transportweg; textBoxPreis.Text = listeKundenDaten[index].Preis; textBoxVersandanschrift.Text = listeKundenDaten[index].Versandanschrift; textBoxVersicherung.Text = listeKundenDaten[index].Versicherung; textBoxBenutzer.Text = listeKundenDaten[index].Benutzer; textBoxZeit.Text = listeKundenDaten[index].Zeit; } */ /* public void KundenLesen(ListBox listBox) { using (SqlConnection sqlConnection = new SqlConnection(sqlPath)) { sqlConnection.Open(); listeKundenDaten.Clear(); listBox.Items.Clear(); using (SqlCommand command = new SqlCommand("SELECT * FROM KUNDEN ORDER BY KDNUMMER", sqlConnection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { listeKundenDaten.Add( new KundenDaten( reader["KDNUMMER"].ToString(), //KundenNummer PK reader["KDOPVA"].ToString(), //Offene Vorgaenge reader["KDBRUTTO"].ToString(), //Bruttopreise reader["KDOPRG"].ToString(), //Offene Posten reader["KDEMTRWEG"].ToString(), //Transportweg reader["KDPREISKZ"].ToString(), //Preis reader["KDVANUMMER"].ToString(), //Versandanschrift reader["KDVERSICH"].ToString(), //Versicherung reader["KDWSNAME"].ToString(), //Benutzer reader["KDWSZEIT"].ToString() //Zeit )); } } } } foreach (KundenDaten kundenDaten in listeKundenDaten) { listBox.Items.Add(kundenDaten.GetCSVSatz()); } } */ } } Das ist halt mein erstes Projekt, in dem ich mit einem Viewmodel arbeiten muss. Ich habe mir viele Tutorials angeguckt und durchgelesen, aber kriege mein Projekt nicht wirklich angepasst. Meine Frage: Seht ihr erste grundlegende Fehler in der erstellung des Viewmodels bzw. bei der Änderung der KundenDaten.cs? Wie soll ich am besten vorgehen als nächstes? Ich steh irgendwie total auf dem Schlauch. Liebe Grüße und eine gute Nacht Balboa44
  8. Hey, Ich möchte am 16.03.20 eine Umschulung zum Fachinformatiker für Anwendungsentwicklung bei der „GPB Berlin“ beginnen. Hat jemand Erfahrung mit der GPB Berlin machen können oder kennt eine gute Alternative? Ich finde im Netz leider nicht all zu viel. Liebe Grüße
  9. Mein Problem ist halt.. Ich habe die Aufgaben im Testtrainer von Hesse/Schrader, IQ und Einstellungstests im Internet, Matheaufgaben aus einem Mathebuch, aber irgendwann kennt man die Aufgaben/Antworten fast auswendig und weiß nicht, ob man jetzt fit ist oder die Aufgaben/Antworten auswendig kennt. Ich glaub, man kann sich nur mit den Aufgabentypen vertraut machen und sollte sich nicht selbst verrückt machen. Ich danke euch für eure Hilfe und werde mein bestes geben.
  10. Vielen lieben Dank für die Antworten! ☺️ Das Gespräch mit der Psychologin hatte ich bereits. Es verlief sehr positiv. Wir haben für den Test einen neuen Termin vereinbart, weil ich durch die Aufregung an dem Tag wenig geschlafen hatte. Prozentrechnung, Zinsrechnung, Bruchrechnung, Gleichungen auflösen das klappt alles sehr gut. Hin und wieder gibt es eine Textaufgabe die ich nicht hinbekomme, aber im Großen und Ganzen läuft es. Die Ungewissheit was wirklich rankommt und wie schwer die Aufgaben sein werden, ist glaub ich das schlimmste. Ich habe diese Beispiele im Internet gefunden zum Test https://www.arbeitsagentur.de/datei/dok_ba013806.pdf , aber kann mir nicht vorstellen, dass die Aufgaben so leicht sind. Ich habe am 18.02.19 den Test und werde gern vom Verlauf und dem Ergebnis berichten. vielen Dank nochmal ✌🏽
  11. Hallo, ich möchte eine Umschulung zum Fachinformatiker (Anwendungsentwicklung) machen. Dafür benötige einen Bildungsgutschein vom Jobcenter, den ich nur bekomme, wenn ich eine Empfehlung vom Berufspsychlogischen Service bekomme. Ich hab viel gegoogelt und dieses Forum nach Infos durchsuch in habe bis jetzt herausgefunden, dass man in mehreren Themenbereichen getestet wird. zb. Mathematik, Logik, Technikverständnis usw. Ausserdem hat man ein Gespräch mit einem Psychologen. Ich lese immer wieder Berichte von: „war mega einfach“ bis „es war mega schwer, bin durchgefallen, deshalb wollte ich einfach mal nachfragen, ob jemand schon Erfahrungen mit dem Test gemacht und eventuell darüber berichten kann. Ich lerne mit IQ Tests, Einstellungstest im Internet, außerdem habe ich mir von Hesse/Schrader „Testtrainer 2000plus“ besorgt. ich fühl mich ganz gut vorbereitet, mach mir aber dennoch sorgen, ob der Test gut verlaufen wird. Die Psychologin meinte zu mir, ich muss in Mathematik, Logik und Technikverständnis überdurchschnittlich abschneiden um eine Empfehlung zu bekommen und weiß einfach nicht, wie anspruchsvoll die Aufgaben werden. Ich hoffe jemand hat ein paar Infos. Liebe Grüße ✌🏽

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...