Come creare una Rubrica Telefonica in C# – Lezione 16 – Esportare la rubrica in HTML

Esportare Rubrica Telefonica da C# ad HTML

Esportare Rubrica Telefonica da C# ad HTML: Proseguiamo il corso sullo sviluppo della rubrica telefonica in C# aggiungendo l’esportazione dell’intera rubrica in HTML.

In questa lezione infatti andremo a creare un template HTML con l’utilizzo di Bootstrap che utilizzeremo come base per il nostro file HTML.

Per iniziare è possibile scaricare il template HTML cliccando sul seguente link:

Questo file vi permetterà di copiare facilmente i codici e non doverli scrivere manualmente.

Ovviamente se avete conoscenze di HTML e CSS potete personalizzare il template per ottenere una grafica più personale.

Come iniziare

Per iniziare l’esportazione, come detto, partiamo dalla creazione di un foglio HTML con dei dati segnaposto che ci serviranno per vedere quale sarà il risultato finale.

Una volta soddisfatti del risultato in HTML possiamo passare allo sviluppo.

Da Visual Studio quindi, creiamo una stringa che andrà a contenere tutto il codice HTML generato.

Per la maggior parte del codice sarà semplicemente un copia e incolla all’interno della stringa, l’unica parte da implementare è quella relativa al contenuto della tabella.

Codice HTML nelle stringhe in C#

//ESEMPIO 1
risultato_finale += "<div class=\"container-fluid\">" + Environment.NewLine;
//ESEMPIO 2
risultato_finale += @"<div class=""container-fluid"">" + Environment.NewLine;

In questo esempio vediamo 2 modi per inserire un codice HTML all’interno di una stringa in C#.

Gli attributi in HTML sono inseriti all’interno delle virgolette, che sono utilizzate in C# per indicare l’inizio e la fine di una stringa.

Inserendo quindi un tag HTML che contiene degli attributi l’impostazione della stringa porterà ad un errore.

Per evitare che ciò accada abbiamo 2 possibilità:

  • Utilizzare l’identificatore verbatim @ prima della stringa e poi inserire due volte le virgolette
  • Inserire una backslash ( \ )prima delle virgolette dell’HTML

In HTML non c’è l’obbligo di mandare a capo ogni riga di codice, potremmo scrivere anche tutto il codice su una sola riga, ma per tenerlo più ordinato, alla fine di ogni riga ho aggiunto Environment.NewLine in questo modo ogni tag è su una riga a parte.

Passaggio dei dati dei contatti alla stringa

int a = 1;
            for (int i = 0; i < tabella_rubrica.RowCount - 1; i++)
            {
                risultato_finale += "<tr>" + Environment.NewLine;
                risultato_finale += "<th scope=\"row\">" + a + "</th>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[1].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[2].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[3].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[4].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[5].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[6].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[7].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[8].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[9].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[10].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[11].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "<td>" + tabella_rubrica.Rows[i].Cells[12].Value.ToString() + "</td>" + Environment.NewLine;
                risultato_finale += "</tr>" + Environment.NewLine;
                a++;
            }

La parte più “complessa” è l’invio dei dati dei contatti dalla tabella alla stringa.

Per farlo creiamo un ciclo for che va a prendere tutte le righe presenti nella DataGridView e per ogni riga genera una nuova riga all’interno della tabella HTML (tr).

Utilizziamo anche la variabile a come id della nuova tabella, per avere degli id che vanno da 1 al numero degli elementi della tabella.

Non ho preso il contenuto della cella id dal software perchè li gli id sono presi dal nome del file e potrebbero non essere consecutivi.

Esportare Rubrica Telefonica da C# ad HTML

dlg_esportahtml.ShowDialog();
            try
            {
                if (dlg_esportahtml.FileName != null)
                {
                    string contenuto_html = "";
                    contenuto_html = genera_html_rubrica();

                    System.IO.File.WriteAllText(dlg_esportahtml.FileName, contenuto_html);
                    System.Diagnostics.Process.Start(dlg_esportahtml.FileName);
                }

            }
            catch { }

Per concludere andiamo a creare la funzione che genera il file HTML.

Per farlo creiamo un SaveFileDialog che permette all’utente di scegliere dove salvare il file HTML.

Utilizziamo poi System.IO.File.WriteAllText per creare un file con il contenuto della stringa HTML che abbiamo generato.

Al termine, avviamo il file tramite System.Diagnostics.Process.Start che apre il file con il software predefinito al quale è associata l’estensione html (generalmente il browser predefinito).