/// <summary>
        /// Get values of GUI elements and send them to the business layer, they shall be stored in the database.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CreateZeiterfassung(object sender, EventArgs e)
        {
            string projektID = null;

            // hide error label
            this.HideMsgLabels();

            ZeitaufzeichnungTable z = new ZeitaufzeichnungTable();

            //define rules
            IRule lnhsv = new LettersNumbersHyphenSpaceValidator();
            IRule pdv = new PositiveDoubleValidator();
            IRule piv = new PositiveIntValidator();
            IRule sl150v = new StringLength150Validator();

            projektID = this.zeiterfassungCombobox.SelectedItem.ToString();
            projektID = projektID.Substring(0, projektID.IndexOf(':'));

            //Bind data
            z.ProjektID = DataBindingFramework.BindFromInt(projektID, "ProjektID", this.zeiterfassungMsgLabel, false, piv);
            z.Stunden = DataBindingFramework.BindFromInt(zeiterfassungHoursTextbox.Text, "Dauer", this.zeiterfassungMsgLabel, false, piv);
            z.Bezeichnung = DataBindingFramework.BindFromString(zeiterfassungDescriptionTextBox.Text, "Bezeichnung", this.zeiterfassungMsgLabel, false, lnhsv, sl150v);
            z.Stundensatz = DataBindingFramework.BindFromInt(zeiterfassungStundensatzTextBox.Text, "Stundensatz", this.zeiterfassungMsgLabel, false, pdv);

            ZeiterfassungsManager saver = new ZeiterfassungsManager();

            // only if binding had no errors
            if (!this.zeiterfassungMsgLabel.Visible)
            {
                try
                {
                    saver.SaveZeiterfassung(z, this.zeiterfassungMsgLabel);
                }
                catch (SQLiteException)
                {
                    this.zeiterfassungMsgLabel.Text = "Aussagekräftiger Fehler";
                    this.zeiterfassungMsgLabel.Show();

                }
                catch (InvalidInputException ex)
                {
                    this.zeiterfassungMsgLabel.Text = ex.Message;
                    this.zeiterfassungMsgLabel.Show();
                }
                GlobalActions.ShowSuccessLabel(this.zeiterfassungMsgLabel);
                ResetZeiterfassung();

            }
        }
        /// <summary>
        /// Loads all Zeiterfassungen into datagrid
        /// </summary>
        private void SearchZeiterfassung(object sender, EventArgs e)
        {
            // get kundenID out of ComboBox
            string projektID = this.zeiterfassungCombobox.SelectedItem.ToString();
            int id = -1;

            try
            {
                id = GlobalActions.GetIdFromCombobox(projektID, zeiterfassungMsgLabel);
            }
            catch
            (
                InvalidInputException
            )
            {
                logger.Log(Logger.Level.Error, "Unknown Exception while getting ID from Projekte from ZeiterfassungTab!");
            }

            ZeiterfassungsManager manager = new ZeiterfassungsManager();
            List<ZeitaufzeichnungTable> results = new List<ZeitaufzeichnungTable>();

            try
            {
                results = manager.LoadZeiterfassung(id, this.zeiterfassungMsgLabel);
            }
            catch (DataBaseException ex)
            {
                this.logger.Log(Logger.Level.Error, "A serious problem with the database has occured. Program will be exited. " + ex.Message + ex.StackTrace);
                Application.Exit();
            }

            this.zeiterfassungBindingSource.DataSource = results;
        }
        /// <summary>
        /// Loads Zeitaufzeichnungen to Datagridview and show Sum of remaining bills
        /// </summary>
        /// <param name="sender">The sending ComboBox</param>
        /// <param name="e">The EventArgs</param>
        private void BindFromExistingZeitaufzeichnungen(object sender, EventArgs e)
        {
            // only if a value is selected
            if (this.projekteComboBox.SelectedIndex > 0)
            {
                List<ZeitaufzeichnungTable> results = new List<ZeitaufzeichnungTable>();

                // get projectID
                int pID = GlobalActions.GetIdFromCombobox(this.projekteComboBox.SelectedValue.ToString(), this.eingangsrechnungMsgLabel);
                this.logger.Log(Logger.Level.Info, "Starts searching for Zeitauffassungen with project id " + pID);

                ZeiterfassungsManager loader = new ZeiterfassungsManager();

                try
                {
                    results = loader.LoadZeiterfassung(pID, this.eingangsrechnungMsgLabel);
                }
                catch(SQLiteException ex)
                {
                    this.logger.Log(Logger.Level.Error, ex.Message);
                    this.eingangsrechnungMsgLabel.Text = ex.Message;
                    this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                    this.eingangsrechnungMsgLabel.Show();
                }

                if (results.Count > 0)
                {
                    // bind to datagridview
                    this.ausgangsrechnungBindingSource.DataSource = results;

                    // calculate sum and set result to textbox
                    int sum = 0;
                    foreach (ZeitaufzeichnungTable aufzeichnung in results)
                    {
                        sum += aufzeichnung.Stunden * aufzeichnung.Stundensatz;
                    }

                    this.unpaidBalanceTextBox.Text = sum.ToString();
                }
            }
        }