Creare un gestionale per strutture ricettive in C# – #12 – Aggiungi Extra

Creare un gestionale per strutture ricettive in C# – #12 – Aggiungi Extra

Creare un gestionale per strutture ricettive in C# – #12 – Aggiungi Extra: Lezione 12 di questo corso, nella quale andremo a collegare la nuova tabella del database al form extra e sconti.

Questa lezione è divisa in due parti, nella prima parte vedremo come evitare che un form possa essere aperto più volte, nella seconda parte invece permetteremo agli utenti di inserire gli elementi nel database degli extra e di caricarli all’apertura del form.

Creare un gestionale per strutture ricettive in C# – #12 – Aggiungi Extra

Istanza singola dei form

Cliccando sui tasti del form principale, è possibile aprire gli altri form che compongono il software, ma questi form possono essere aperti infinite volte.

Questo potrebbe essere un problema, soprattutto quando ci si collega ad un database, perchè un form potrebbe non essere aggiornato rispetto ad un altro, e potremmo rischiare di perdere alcuni dati o di danneggiare il database.

Per risolvere questo problema abbiamo diverse soluzioni, quella più rapida è semplice consiste nel sostituire .Show(), con .ShowDialog().

Quindi:

FormExtraSconti.Show();

diventa:

FormExtraSconti.ShowDialog();

In questo modo il nuovo form aperto sarà sempre in primo piano, e non sarà possibile passare ad altri form senza aver prima chiuso il precedente.

Questa soluzione può essere utile se vogliamo che l’utente utilizzi un solo form per volta.

Ma in alcuni casi, potrebbe essere utile permettere all’utente di aprire più finestre, ad esempio Prenotazioni e Sconti per aggiornare le offerte senza dover chiudere una prenotazione in corso.

In questo caso ovviamente questo metodo non sarebbe attuabile.

Quindi possiamo aggiungere un codice che permetterà di controllare se un determinato form è già aperto, nel caso in cui lo fosse invece di aprirne una nuova istanza, andrebbe a portare in primo piano quella già aperta.

Quindi:

ExtraSconti.ExtraSconti FormExtraSconti = new ExtraSconti.ExtraSconti();
FormExtraSconti.Show();

diventa:

ExtraSconti.ExtraSconti FormExtraSconti = new ExtraSconti.ExtraSconti();
            for (int a = 0; a < Application.OpenForms.Count; a++)
            {
                if (Application.OpenForms[a].Name == FormExtraSconti.Name)
                {
                    Application.OpenForms[a].BringToFront();
                    return;
                }
            }
FormExtraSconti.Show();

Andiamo ad analizzare tutti i form aperti dall’applicazione, confrontando i loro nomi con il nome del form che stiamo cercando di aprire.

Nel caso in cui il nome fosse presente lo porteremo in primo piano, altrimenti permetteremo l’apertura del nuovo form.

Aggiungi Extra

Ritornando al tema principale della lezione 12, l’invio ed il caricamento dei dati nel database è molto simile a quanto visto per le camere.

Ma in questa lezione ci sono alcune differenze.

La differenza principale riguarda l’invio di informazioni multiple alla proprietà tag della groupbox.

Fino ad ora infatti avevamo sempre inviato una singola variabile a questa proprietà.

In questo caso però non sarebbe applicabile, perchè abbiamo bisogno di 2 informazioni:

  • Aggiungi o Modifica (se quindi stiamo aggiungendo un nuovo elemento o modificandone uno esistente)
  • Extra o Sconto (se lo stiamo facendo per la tabella extra o per quella degli sconti)

Potremmo creare 2 variabili, oppure associare un valore ad un elemento ed uno ad un altro, ma per mantenere la linea di programmazione utilizzata fino ad ora continueremo ad assegnare i valori ad un singolo elemento.

Per poter assegnare 2 valori alla proprietà Tag, andremo a creare una nuova classe e la assegneremo al tag.

Creazione della classe:

public class ElementiTag
    {
        public string TipoElemento;
        public string Tabella;
    }

Assegnazione dei valori:

grpAggiungiElemento.Tag = new ElementiTag { TipoElemento = "aggiungi", Tabella = "extra" };

Con la prima parte abbiamo definito la classe con le 2 variabili (nel nostro caso sono 2, ma possiamo inserirne quante vogliamo).

Nella seconda parte invece l’abbiamo assegnata alla prorietà Tag di grpAggiungiElemento, ed abbiamo assegnato i valori a TipoElemento e a Tabella.

Per ricaricare in seguito le informazioni inserite ci basterà andare a leggere il contenuto in questo modo:

ElementiTag CaricaElementi = (ElementiTag)grpAggiungiElemento.Tag;
// CaricaElementi.TipoElemento
// CaricaElementi.Tabella