/// <summary>
        /// Creates a new Ausgangsrechnung with the provided parameters
        /// </summary>
        /// <param name="sender">The sending button</param>
        /// <param name="e">The EventArgs</param>
        private void CreateAusgangsrechnung(object sender, EventArgs e)
        {
            // reset message label
            this.ausgangsrechnungMsgLabel.Visible = false;
            this.ausgangsrechnungMsgLabel.Text = string.Empty;

            // check if a projekt is selected
            if (this.projekteComboBox.SelectedIndex < 1)
            {
                this.ausgangsrechnungMsgLabel.Visible = true;
                this.ausgangsrechnungMsgLabel.Text = "Kein Projekt ausgewählt";
                this.ausgangsrechnungMsgLabel.ForeColor = Color.Red;
                return;
            }

            AusgangsrechnungTable table = new AusgangsrechnungTable();

            // Get values
            int projektID = GlobalActions.GetIdFromCombobox(this.projekteComboBox.SelectedValue.ToString(), this.ausgangsrechnungMsgLabel);
            string unpaidBalanceString = this.unpaidBalanceTextBox.Text;
            string rechnungstitelString = this.rechnungstitelTextBox.Text;

            double unpaidBalance;

            // Validate values
            IRule posintval = new PositiveIntValidator();
            IRule posdoubval = new PositiveDoubleValidator();
            IRule lnhsv = new LettersNumbersHyphenSpaceValidator();
            IRule slv = new StringLength150Validator();

            DataBindingFramework.BindFromInt(projektID.ToString(), "ProjektID", this.ausgangsrechnungMsgLabel, false, posintval);
            unpaidBalance = DataBindingFramework.BindFromDouble(unpaidBalanceString, "Offener Betrag", this.ausgangsrechnungMsgLabel, false, posdoubval);
            DataBindingFramework.BindFromString(rechnungstitelString, "Rechnungstitel", this.ausgangsrechnungMsgLabel, false, lnhsv, slv);

            // return if errors occured
            if (this.ausgangsrechnungMsgLabel.Visible)
            {
                return;
            }

            // no errors, send values to business layer
            RechnungsManager saver = new RechnungsManager();

            try
            {
                saver.CreateAusgangsrechnung(projektID, unpaidBalance, rechnungstitelString);
            }
            catch (InvalidInputException)
            {
                this.logger.Log(Logger.Level.Error, "The business layer returned the provided values for saving a new Ausgangsrechnung with an error.");
            }
            catch (DataBaseException ex)
            {
                this.logger.Log(Logger.Level.Error, "A serious problem with the database occured while trying to save a new Ausgangsrechnung.");
                this.logger.Log(Logger.Level.Error, ex.Message);
                this.ausgangsrechnungMsgLabel.Text = ex.Message;
                this.ausgangsrechnungMsgLabel.ForeColor = Color.Red;
                this.ausgangsrechnungMsgLabel.Show();
            }

            // show success message label (only if saving has been successful)
            if (!this.ausgangsrechnungMsgLabel.Visible)
            {
                GlobalActions.ShowSuccessLabel(this.ausgangsrechnungMsgLabel);
            }
        }
        // add Buchungszeile
        private void AddBuchungszeileToDataGridView()
        {
            string betrag = this.eingangsrechnungBetragTextBox.Text;
            string bezeichnung = this.buchungszeileBezeichnungTextBox.Text;

            IRule pdv = new PositiveDoubleValidator();
            IRule lnhsv = new LettersNumbersHyphenSpaceValidator();
            IRule slv = new StringLength150Validator();

            // Create Buchungszeilen business object
            BuchungszeilenTable buchungszeile = new BuchungszeilenTable();
            buchungszeile.Bezeichnung = DataBindingFramework.BindFromString(bezeichnung, "Bezeichnung", this.eingangsrechnungMsgLabel, false, lnhsv, slv);
            buchungszeile.BetragNetto = DataBindingFramework.BindFromDouble(betrag, "Betrag", this.eingangsrechnungMsgLabel, false, pdv);
            buchungszeile.KategorieID = this.kategorieComboBox.SelectedIndex+1;
            buchungszeile.Buchungsdatum = DateTime.Now.ToShortDateString();

            // in case of errors, do not continue with saving new Eingangsrechnung
            if (this.eingangsrechnungMsgLabel.Visible)
            { return; }

            // add to DataGridView
            this.buchungszeilenBindingSource.Add(buchungszeile);
            GlobalActions.ShowSuccessLabel(this.eingangsrechnungMsgLabel);
        }