Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Sascha87
Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Ich hoffe, ich gehe euch nicht all zu sehr auf den Sack. Nach und nach verstehe ich es so langsam.

Die if Anweisung ist eine Möglichkeit, ich habe mir jetzt das "gegen Null" prüfen angeschaut.

Dazu habe ich folgende Methode erstellt:


public bool IsNullOrEmptyWertAusWPF(string wertAusWPF)
        {
            bool isempty;

            isempty =  wertAusWPF == null || wertAusWPF == string.Empty;
            
            return isempty;
        }
Wenn ich jetzt 2 verschiedene Typen habe, einmal int und einmal string, müsste ich die Methode genau danach ausrichten? Sprich 2 Methoden anlegen?


Das ganze im Event mit eingefügt:


private void BtnUvEintrag_Click(object sender, RoutedEventArgs e)
        {
            using (MySqlConnection connection = GetConnection())
            {
                
                    bool IsNullOrEmptyFach = IsNullOrEmptyWertAusWPF((string)listFach.SelectedValue);
                    bool IsNullOrEmptyJahrgang = IsNullOrEmptyWertAusWPF((string)listJahrgang.SelectedValue);
                    bool isValidPassword = IsValidPassword(connection, listFach.SelectedValue, Passwort.Text);

                    if (isValidPassword && IsNullOrEmptyFach && IsNullOrEmptyJahrgang)
                    {
                        MessageBox.Show("Das Unterrichtsvorhaben wurde erfolgreich angelegt.");
                    }
                    else
                    {
                        MessageBox.Show("Folgende Angaben müssen vorher gemacht werden:\n- Fach\n- Jahrgang\n- Passwort");
                    }
            }
        }

Zitat
Der Fehler kommt, da du mit "(int)listFach.SelectedValue" eine Umwandlung des ausgewählten Wert zu int forcierst.

Auch, wenn es doof klingt, hat mir Studio gesagt, ich soll (int) eintragen da ein Objekt nicht in int konvertiert werden kann.
Als alternativ Vorschlag kam folgendes:


throw new NotImplementedException();

Wenn ich richtig verstehe, wird die Meldung damit nur unterdrückt?






Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Ok, das mit den Breakpoints habe ich verstanden und ist eine super Hilfe. Ich wusste nicht das man so etwas in Studio einstellen kann.

Ich glaube, ich habe erneut einen Gedankenfehler.

Ich habe aktuell ein Problem mit folgender Zeile:


bool isValidPassword = IsValidPassword(connection, (int)listFach.SelectedValue, Passwort.Text);

Wenn ich kein Fach angebe, schmeißt er mir einen Fehler aus.Klar, enthält ja keinen Wert.

Fehler
System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

System.Windows.Controls.Primitives.Selector.SelectedValue.get hat null zurückgegeben.


Ich würde, mit meinem Wissensstand daher gehen und eine if Abfrage vorher machen, um zu prüfen, ob die Zeile ausgefüllt ist.


private void BtnUvEintrag_Click(object sender, RoutedEventArgs e)
        {
            using (MySqlConnection connection = GetConnection())
            {
                if (listFach.SelectedValue != null && listJahrgang.SelectedValue != null) 
                {

                    bool isValidPassword = IsValidPassword(connection, (int)listFach.SelectedValue, Passwort.Text);

                    if (isValidPassword)
                    {
                        MessageBox.Show("Das Unterrichtsvorhaben wurde erfolgreich angelegt.");
                    }
                    else
                    {
                        MessageBox.Show("Es wurde ein falsches Passwort angegeben!");
                    }

                }
                else
                {
                    MessageBox.Show("Folgende Angaben müssen vorher gemacht werden:\n- Fach\n- Jahrgang\n- Passwort");
                }

                
            }
        }


Da gibt es mit Sicherheit auch einen anderen Weg, oder?
Auch wieder in eine separate Funktion auslagern?

Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Guten Morgen zusammen,
der Code sieht wirklich übersichtlicher aus. Ich werde es mir ab jetzt vornehmen und alles überarbeiten.

@Abt, ich habe dein Beispiel gerade übernommen und abgeändert. Bevor ich in die Datenbank speichere gebe ich in der if Anweisung erst einmal eine MessageBox aus.

Was folgendes passiert, wenn ich kein Fach auswähle, bricht das Script einfach ab. Ich würde jetzt einfach eine if Anweisung zur Überprüfung machen (wie im Ursprungsscript von mir).

Jetzt würde mich folgender Satz von dscNRW interessieren:

Zitat
Hast du denn mal Breakpoints gesetzt und geprüft ob listFach.SelectedValue != null && listJahrgang.SelectedValue != null wirklich true ist?

Überprüfe ich nicht mit der Abfrage ob es true ist?


Liebe Grüße und vielen lieben Dank!
Sascha

Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Ich übergebe die FachID an die Tabelle (wurde vorher in einer ListBox ausgewählt).
Dadurch suche ich das richtige Passwort raus (Die Passwörter sind nicht an Benutzer sondern an die Fächer gebunden) und vergleiche anschließend
das vom Benutzer eingegebene Passwort mit dem Passwort aus der Datenbank (die entsprechende if).


if (listFach.SelectedValue != null && listJahrgang.SelectedValue != null && Passwort.Text == passDB)

Using habe ich bisher immer genutzt. Ich wusste nur nicht, dass ich die verschachteln kann. Dennoch scheint es (bei mir) nicht ganz zu funktionieren.
Ich verstehe den eigentlichen Aufbau bis jetzt noch nicht.

Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Zitat
Also zunächst muss man Dich darauf hinweisen, dass das, was Du hier machst, in der EU verboten ist sofern Du das nicht für Dich privat oder als Übung einsetzt.

Das Passwort wird später wieder verschlüsselt. Grundsätzlich bastel ich das Script zur zum Lernen.
Deine Links schaue ich mir weiterhin an. Ich möchte gerne alle Funktionen erst einmal fertigstellen.
Anschließend, den Hinweis hattest du mir schon einmal gegeben, werde ich alles in die "Drei-Schichten-Architektur" umwandeln. Dazu wollte ich das jetzige erst einmal verstehen.
Zusätzlich muss ich mir noch DataBindings anschauen.

Vielen lieben Dank!

Thema: MySQL Select mit einem Insert innerhalb einer if -Anweisung gepaart.
Am im Forum: Datentechnologien

Verwendetes Datenbanksystem: MySQL/MariaDB

Hallo zusammen, ich habe erneut ein Problem bei einer Abfrage.
Ich wusste nicht genau wie ich mein Problem im Title beschreiben sollte. Ich hoffe der ist ok so.

Im ersten Teil lese ich ein Passwort aus und vergleiche es mit dem eingegebenen Passwort (Das Eingabefeld ist eine TextBox, wird aber noch geändert. Ist nur zum testen).

Wenn der Vergleich zutrifft (Bis hier hin funktioniert es) führt er den Teil unter "try" aus. Allerdings macht er keinen DB Eintrag. Jemand einen Tipp wie ich an mögliche Fehlerquellen komme oder sieht auf anhieb was falsch ist? (Bin Anfänger und das ganze ist zum testen)


private void BtnUvEintrag_Click(object sender, RoutedEventArgs e)
        {
            //Passwort auslesen
            MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter();
            MySqlCommand cmd;
            MySqlDataReader reader;

            cmd = new MySqlCommand("select passwort from passwort where fachID = @fachID", sqlConnection);
            sqlConnection.Open();
            cmd.Parameters.AddWithValue("@fachID", listFach.SelectedValue);
            cmd.Parameters.AddWithValue("@uvInsert", sendUvorhaben.Text);
            cmd.Parameters.AddWithValue("@jahrgangID", listJahrgang.SelectedValue);

            reader = cmd.ExecuteReader();
            reader.Read();

            var passDB = reader["passwort"].ToString();

            if (listFach.SelectedValue != null && listJahrgang.SelectedValue != null && Passwort.Text == passDB)
            {
                
                try
                {
                    cmd = new MySqlCommand("insert into uvorhaben (uvorhaben) value (@uvInsert); insert into faecherJahrgangUvorhaben (fachID, jahrgangID, uvorhabenID) value (@fachID, @jahrgangID, LAST_INSERT_ID())", sqlConnection);
                    MessageBox.Show("Unterrichtsvorhaben wurde gespeichert.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    if (sqlConnection != null) sqlConnection.Close();
                }

            }
            else
            {
                MessageBox.Show("Das Fach und der Jahrgang muss ausgewählt sein.\nEventuell ist auch das Passwort falsch");
            }
        }

Vielen Dank für eure Hilfe! Ich bin sehr Dankbar dafür!
Liebe Grüße
Sascha

Thema: 2 MySql Inserts - ID von Insert 1 in Insert 2
Am im Forum: Datentechnologien

Verwendetes Datenbanksystem: <MySql (MariaDB)>

Edit: Das Problem hat sich gerade von selbst gelöst.
Die Lösung habe ich unten gepostet, falls jemand das gleiche Problem hat.

Hallo zusammen, ich möchte in zwei verschiedenen Tabellen Daten schreiben.
Das Problem dabei ist, in die zweite Tabelle soll die ID der ersten Tabelle mit geschrieben werden. Die ID wird in dem Moment allerdings erst automatisch (auto_increment) eingetragen.

Gibt es eine Möglichkeit diese direkt mit zu übergeben?


string query = "insert into uvorhaben (uvorhaben) value (@uvInsert) insert into faecherJahrgangUvorhaben (fachID, jahrgangID, uvorhabenID) value (@fachID, @jahrgangID, ID DIE ZU BEGINN AUTOMATISCH ANGELEGT WIRD";

Lösung:


string query = "insert into uvorhaben (uvorhaben) value (@uvInsert); insert into faecherJahrgangUvorhaben (uvorhabenID, fachID, jahrgangID) value (LAST_INSERT_ID(),@fachID, @jahrgangID)";

Vielen lieben Dank!
Grüße
Sascha

Thema: ListBox Mehrfachauswahl in PDF Schreiben
Am im Forum: GUI: WPF und XAML

Oh, entschuldige bitte. Ich dachte, so bleibt es übersichtlicher.

Hier der Code der MainWondow.xaml.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using MySql.Data.MySqlClient;
using System.Data.Common;
using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using System.Diagnostics;
using System.IO;
using PdfSharp.Pdf.IO;
using System.Collections.Specialized;

namespace HLSFoerderPlaner
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    /// 
    
   
    public partial class MainWindow : Window
    {
        public MySqlConnection sqlConnection;
        public List list;

        
        public MainWindow()
        {
            InitializeComponent();

            logo.Source = new BitmapImage(new Uri(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images\\logo.png")));
            Uri iconUri = new Uri(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images\\favicon.ico"));
            this.Icon = BitmapFrame.Create(iconUri);

            // Erstellung des ConnectionStrings
            string server = "";
            string database = "";
            string uid = "";
            string password = "";
            string connectionString; 
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

            sqlConnection = new MySqlConnection(connectionString);
            
            //Ausgabe der Liste - Fach
            ShowFach();
            
        }

        public void ShowFach()
        {
            try
            {
                //Daten aus der Tabelle lesen
                string query = "select * from faecher order by fach asc";
              
                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    sqlConnection.Open();
                    //Daten in fachtable füllen
                   
                    DataTable fachTable = new DataTable();
                    mysqlDataAdapter.Fill(fachTable);

                    listFach.DisplayMemberPath = "fach";
                    listFach.SelectedValuePath = "id";
                    
                    listFach.ItemsSource = fachTable.DefaultView;

                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

        public void ShowJahrgang()
        {
            try
            {
                
                //Daten aus der Tabelle lesen
                string query = "select * from jahrgang a inner join faecherJahrgang fj on a.id = fj.jahrgangID where fj.faecherID = @fachID";

                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    cmd.Parameters.AddWithValue("@fachID", listFach.SelectedValue);

                    DataTable jahrgangTable = new DataTable();
                    mysqlDataAdapter.Fill(jahrgangTable);

                    listJahrgang.DisplayMemberPath = "jahrgang";
                    listJahrgang.SelectedValuePath = "id";
                    listJahrgang.ItemsSource = jahrgangTable.DefaultView;


                }
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

        public void ShowUvorhaben()
        {
            try
            {

                //Daten aus der Tabelle lesen
                string query = "select * from uvorhaben a inner join faecherJahrgangUvorhaben fju on a.id = fju.uvorhabenID where fju.fachID = @fachID AND fju.jahrgangID = @jahrID order by uvorhaben asc";

                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    cmd.Parameters.AddWithValue("@fachID", listFach.SelectedValue);
                    cmd.Parameters.AddWithValue("@jahrID", listJahrgang.SelectedValue);

                    DataTable uvorhabenTable = new DataTable();
                    mysqlDataAdapter.Fill(uvorhabenTable);

                    listUvorhaben.DisplayMemberPath = "uvorhaben";
                    listUvorhaben.SelectedValuePath = "id";
                    listUvorhaben.ItemsSource = uvorhabenTable.DefaultView;

                }
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

        public void ShowKompetenzen()
        {
            try
            {

                //Daten aus der Tabelle lesen
                string query = "select * from kompetenzen a inner join uvKomp uvk on a.id = uvk.kompID where uvk.jahrgangID = @jahrID AND uvk.uvorhabenID = @uvorhabenID order by kompetenz asc";

                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    cmd.Parameters.AddWithValue("@uvorhabenID", listUvorhaben.SelectedValue);
                    cmd.Parameters.AddWithValue("@jahrID", listJahrgang.SelectedValue);

                    DataTable kompetenzTable = new DataTable();
                    mysqlDataAdapter.Fill(kompetenzTable);

                    listKompetenz.SelectionMode = SelectionMode.Multiple;
                    listKompetenz.DisplayMemberPath = "kompetenz";
                    listKompetenz.SelectedValuePath = "id";
                    listKompetenz.ItemsSource = kompetenzTable.DefaultView;


                }
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

        public void ShowKompetenzErwartungen()
        {
            try
            {

                //Daten aus der Tabelle lesen
                string query = "select * from kompErwartungen a inner join uvJahrErwartungen uje on a.id = uje.kompErwartungenID where uje.jahrgangID = @jahrID AND uje.uvID = @uvID order by kompErwartungen asc";

                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    cmd.Parameters.AddWithValue("@uvID", listUvorhaben.SelectedValue);
                    cmd.Parameters.AddWithValue("@jahrID", listJahrgang.SelectedValue);

                    DataTable kompErwartungenTable = new DataTable();
                    mysqlDataAdapter.Fill(kompErwartungenTable);

                    listFoerder.SelectionMode = SelectionMode.Multiple;
                    listFoerder.DisplayMemberPath = "kompErwartungen";
                    listFoerder.SelectedValuePath = "id";
                    listFoerder.ItemsSource = kompErwartungenTable.DefaultView;


                }
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

        private void ListFach_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ShowJahrgang();
        }

        private void ListJahrgang_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ShowUvorhaben();
        }

        private void ListKompetenz_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ShowKompetenzen();
            ShowKompetenzErwartungen();
        }

        private void PdfErstellen_Click(object sender, RoutedEventArgs e)
        {
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

            PdfDocument document = new PdfDocument();
            PdfPage page = document.AddPage();
            page.Size = PdfSharp.PageSize.A4;
            XGraphics gfx = XGraphics.FromPdfPage(page);


            XFont font = new XFont("Bell MT", 12);
            XFont fontfett = new XFont("Bell MT", 12, XFontStyle.Bold);
            XFont uschrift = new XFont("Bell MT", 18, XFontStyle.Bold);
            

            //Hintergrund- Overlay
            gfx.DrawImage(XImage.FromFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "images\\overlay.png")), 0, 0);

            //Überschrift
            gfx.DrawString("Individueller Förderplan von " + name.Text, uschrift, XBrushes.Black, new XRect(40, 150, page.Width, page.Height), XStringFormats.TopLeft);


            var FachItem = (listFach.SelectedItem as DataRowView)["fach"].ToString();
            var UvItem = (listUvorhaben.SelectedItem as DataRowView)["uvorhaben"].ToString();

            
            var kompItems = (listKompetenz.SelectedItem as DataRowView)["kompetenz"].ToString();
            var FoerderItem = (listFoerder.SelectedItem as DataRowView)["kompErwartungen"].ToString();

            gfx.DrawString("Fach: ", fontfett, XBrushes.Black, new XRect(40, 200, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(FachItem, font, XBrushes.Black, new XRect(75, 200, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString("Unterrichtsvorhaben: ", fontfett, XBrushes.Black, new XRect(40, 215, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(UvItem, font, XBrushes.Black, new XRect(155, 215, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString("Lernziel:", fontfett, XBrushes.Black, new XRect(40, 230, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(name.Text + " wird in dieser Unterrichtseinheit ", font, XBrushes.Black, new XRect(40, 245, page.Width, page.Height), XStringFormats.TopLeft);
            
            if (zielgleich.IsChecked == true)
            {
                gfx.DrawString("zielgleich unterrichtet und dabei die nachfolgend aufgeführten Kompetenzen erwerben.", font, XBrushes.Black, new XRect(40, 260, page.Width, page.Height), XStringFormats.TopLeft);
            }
            if (zieldifferent.IsChecked == true)
            {
                gfx.DrawString("zieldifferent unterrichtet und dabei die nachfolgend aufgeführten Kompetenzen erwerben.", font, XBrushes.Black, new XRect(40, 260, page.Width, page.Height), XStringFormats.TopLeft);
            }
            if (alternativLZ.IsChecked == true)
            {
                gfx.DrawString("ein alternatives Lernziel verfolgen und damit die nachfolgend aufgeführten Kompetenzen erwerben.", font, XBrushes.Black, new XRect(40, 260, page.Width, page.Height), XStringFormats.TopLeft);
            }

            gfx.DrawString("Kompetenzerwartungen", fontfett, XBrushes.Black, new XRect(40, 290, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(name.Text + " kennt/kann ... ", font, XBrushes.Black, new XRect(40, 305, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(kompItems, font, XBrushes.Black, new XRect(40, 320, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString("Fördermaßnahmen", fontfett, XBrushes.Black, new XRect(40, 335, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(name.Text + " ... ", font, XBrushes.Black, new XRect(40, 350, page.Width, page.Height), XStringFormats.TopLeft);
            gfx.DrawString(FoerderItem, font, XBrushes.Black, new XRect(40, 365, page.Width, page.Height), XStringFormats.TopLeft);

            string filename = System.IO.Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), this.name.Text + "-Förderplan.pdf");
            document.Save(filename);
            MessageBox.Show("Die PDF wurde auf dem Desktop gespeichert.");
        }     
}
}


Und hier die entsprechende XAML


<Window x:Class="HLSFoerderPlaner.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:HLSFoerderPlaner"
        mc:Ignorable="d"
        Title="Förderplaner" 
        Height="863" 
        Width="1000"
       >
    <Window.Effect>
        <DropShadowEffect/>
    </Window.Effect>
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,10,2,-12" Width="980" Height="834">
        <Label Content="Förderplaner" Margin="333,10,330,748" FontSize="48" FontWeight="Bold" FontStyle="Italic" HorizontalAlignment="Center" Width="317"/>

        <TextBox Name ="name" HorizontalAlignment="Left" Height="23" Margin="288,119,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" RenderTransformOrigin="-0.003,0.669"/>
        <Label Content="Name:" HorizontalAlignment="Left" Margin="222,116,0,0" VerticalAlignment="Top"/>

        <Label Content="Zielkontrolle:" HorizontalAlignment="Left" Margin="426,100,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="lzk" Content="LZK" HorizontalAlignment="Left" Margin="508,107,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="koratest" Content="Kompetenzrastertest(s)" HorizontalAlignment="Left" Margin="508,127,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="klabasis" Content="Klassenarbeit (Basis und Einstieg)" HorizontalAlignment="Left" Margin="508,147,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="klaaufstieg" Content="Klassenarbeit (Einstieg und Aufstieg)" HorizontalAlignment="Left" Margin="508,167,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="alternachweis" Content="Alternativer Leistungsnachweis" HorizontalAlignment="Left" Margin="508,187,0,0" VerticalAlignment="Top"/>

        <Label Content="Zeitraum: " HorizontalAlignment="Left" Margin="690,105,0,0" VerticalAlignment="Top"/>
        <Label Content="Von: " HorizontalAlignment="Left" Margin="758,105,0,0" VerticalAlignment="Top"/>
        <Label Content="Bis: " HorizontalAlignment="Left" Margin="764,141,0,0" VerticalAlignment="Top"/>
        <DatePicker x:Name="Von" HorizontalAlignment="Left" Margin="796,107,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.14,0.656" />
        <DatePicker x:Name="Bis" HorizontalAlignment="Left" Margin="796,142,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.69,1.167"/>

        <CheckBox x:Name="zielgleich" Content="SuS wird zielgleich unterrichtet und dabei die nachfolgend aufgeführten Kompetenzen erwerben." HorizontalAlignment="Left" Margin="31,238,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="zieldifferent" Content="SuS wird zieldifferent unterrichtet und dabei die nachfolgend aufgeführten Kompetenzen erwerben." HorizontalAlignment="Left" Margin="31,258,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="alternativLZ" Content="SuS wird ein alternatives Lernziel verfolgen und damit die nachfolgend aufgeführten Kompetenzen erwerben." HorizontalAlignment="Left" Margin="31,278,0,0" VerticalAlignment="Top"/>

        <TextBox Name ="schuljahr" HorizontalAlignment="Left" Height="23" Margin="288,156,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" RenderTransformOrigin="-0.003,0.669"/>
        <Label Content="Schuljahr:" HorizontalAlignment="Left" Margin="222,156,0,0" VerticalAlignment="Top"/>

        <Label Content="Fach:" HorizontalAlignment="Left" Margin="31,310,0,0" VerticalAlignment="Top"/>
        <Label Content="Jahrgang" HorizontalAlignment="Left" Margin="197,310,0,0" VerticalAlignment="Top"/>
        <Label Content="Unterrichtsvorhaben" HorizontalAlignment="Left" Margin="274,310,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.517,-0.346"/>

        <ListBox Name ="listFach" HorizontalAlignment="Left" SelectionChanged="ListFach_SelectionChanged" Height="175" Margin="31,336,0,0" VerticalAlignment="Top" Width="150"/>
        <ListBox Name ="listJahrgang" HorizontalAlignment="Left" SelectionChanged="ListJahrgang_SelectionChanged" Height="175" Margin="202,336,0,0" VerticalAlignment="Top" Width="50"/>
        <ListBox Name ="listUvorhaben" HorizontalAlignment="Left" SelectionChanged="ListKompetenz_SelectionChanged" Height="175" Margin="274,336,0,0" VerticalAlignment="Top" Width="200"/>

        <Label Content="Kompetenzerwartungen:" HorizontalAlignment="Left" Margin="27,523,0,0" VerticalAlignment="Top"/>
        <ListBox Name ="listKompetenz" HorizontalAlignment="Left" Height="200" Margin="27,549,0,0" VerticalAlignment="Top" Width="441"/>
        <Image Name="logo" HorizontalAlignment="Left" Height="213" Margin="28,6,0,0" VerticalAlignment="Top" Width="178" />


        <Label Content="Fördermaßnahmen:" HorizontalAlignment="Left" Margin="496,523,0,0" VerticalAlignment="Top"/>
        <ListBox x:Name ="listFoerder" HorizontalAlignment="Left" Height="200" Margin="496,549,0,0" VerticalAlignment="Top" Width="441"/>
        <Button Name="pdfErstellen" Content="PDF erstellen" HorizontalAlignment="Left" Margin="803,763,0,0" VerticalAlignment="Top" Width="135" Height="35" Click="PdfErstellen_Click"/>



    </Grid>
</Window>


Thema: ListBox Mehrfachauswahl in PDF Schreiben
Am im Forum: GUI: WPF und XAML

In erster Linie vielen vielen Dank, das ihr zwei euch die Zeit nehmt.

Den Hinweis mit der Datenbank nehme ich gerne an. Auch, wenn Abt relativ recht hat, das mein Wissensstand nicht besonders groß ist.
Das Projekt ist zum Lernen da. Daher nehme ich jeden Tipp und Hinweis an.
Der jetzige Wissensstand beruht auf einem Udemy Kurs. Irgendwie muss man ja anfangen

Ich bin jetzt mal so frech und stelle den Code per Pastebin online. An welcher Stelle sollte ich die Datenbank öffnen/schließen?

MainWindow.xaml.cs
Edit von Abt: Link entfernt

MainWindow.xaml
Edit von Abt: Link entfernt
DataBindings werde ich mir anschauen. Hier bin ich, wie gesagt, anhand eines Udemy Kurses heran gegangen. Daher habe ich mich auf den Aufbau ein wenig Verlassen.

Zu meinem Ursprünglichen Problem:

Zitat
Dann musst Du mit SelectedItems (also Plural, nicht das Single-Item) arbeiten.
Das hatte ich probiert. Allerdings gab es ebenfalls nur den genannten Fehler als Ausgabe.

Jetzt habe ich öfters gelesen, dass ich eventuell eine for-Schleife nutzen soll. Wäre das eine Möglichkeit? (als Übergangslösung)

Vielen lieben Dank nochmals!
Liebe Grüße
Sascha

Thema: ListBox Mehrfachauswahl in PDF Schreiben
Am im Forum: GUI: WPF und XAML

Ich versuche mal die entsprechenden Code Teile zu kopieren.
Das hier ist die Funktion, die die Werte an die ListBox sendet:


public void ShowKompetenzen()
        {
            try
            {

                //Daten aus der Tabelle lesen
                string query = "select * from kompetenzen a inner join uvKomp uvk on a.id = uvk.kompID where uvk.jahrgangID = @jahrID AND uvk.uvorhabenID = @uvorhabenID order by kompetenz asc";

                MySqlCommand cmd = new MySqlCommand(query, sqlConnection);

                MySqlDataAdapter mysqlDataAdapter = new MySqlDataAdapter(cmd);

                using (mysqlDataAdapter)
                {
                    cmd.Parameters.AddWithValue("@uvorhabenID", listUvorhaben.SelectedValue);
                    cmd.Parameters.AddWithValue("@jahrID", listJahrgang.SelectedValue);

                    DataTable kompetenzTable = new DataTable();
                    mysqlDataAdapter.Fill(kompetenzTable);

                    listKompetenz.SelectionMode = SelectionMode.Multiple;
                    listKompetenz.DisplayMemberPath = "kompetenz";
                    listKompetenz.SelectedValuePath = "id";
                    listKompetenz.ItemsSource = kompetenzTable.DefaultView;


                }
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sqlConnection.Close();
            }
        }

Das hier ist die entsprechende ListBox in XAML

<ListBox Name ="listKompetenz" HorizontalAlignment="Left" Height="200" Margin="27,549,0,0" VerticalAlignment="Top" Width="441" SelectionChanged="listKompetenz_SelectionChanged_1"/>

Ich habe einen Button eingefügt. Wenn er betätigt wird, wird die PDF (mit PDFSharp) erstellt.

Das ist ein Teilauszug aus dem Bereich:


var kompItems = (listKompetenz.SelectedItem as DataRowView)["kompetenz"].ToString();

gfx.DrawString(kompItems, font, XBrushes.Black, new XRect(40, 320, page.Width, page.Height), XStringFormats.TopLeft);

Das Thema DataBinding schaue ich mir mal an. Ist nur recht schwierig, als Anfänger, die richtigen Seiten zu finden.

Vielen Dank für den Tipp!
Grüße
Sascha

Thema: ListBox Mehrfachauswahl in PDF Schreiben
Am im Forum: GUI: WPF und XAML

Hallo und einen schönen Sonntag zusammen,
ich bin neu hier im Forum sowie ein recht blutiger Anfänger was C# angeht.
Ich sitze gerade vor einem Problem.
Ich möchten Daten aus einer ListBox in eine PDF schreiben.
Die ListBoxen werden von mir mit Daten aus einer Datenbank befüllt:


listKompetenz.DisplayMemberPath = "kompetenz";
listKompetenz.SelectedValuePath = "id";
listKompetenz.ItemsSource = kompetenzTable.DefaultView;

Jetzt möchte ich, wenn eins der Elemente ausgewählt wurde, das Element in eine PDF (mit PDFSharp) schreiben.
Statt den ausgewählten Text wurde:
Fehler
System.Data.DataRowView

ausgegeben.

Also habe ich folgendes gemacht:


var FachItem = (listFach.SelectedItem as DataRowView)["fach"].ToString();

Jetzt wird mir der richtige Text ausgegeben.
Leider habe ich eine Liste, bei der eine Mehrfachauswahl gemacht werden kann. Dort funktioniert es leider nicht.
Wenn ich mit Arrays oder Listen arbeite, meldet er, dass DataRowView nicht als String konvertiert werden kann.
Hat jemand ein Tipp für mich?
Vielen Dank im voraus!
Grüße
Sascha