martedì 23 luglio 2019

DatagridView salvare da una colonna immagine un file sul pc tramite VB.Net e C# seconda parte

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-datagridview-salvare-da-una-colonna-_1628.aspx


Riprendiamo la seconda parte dell'articolo riguardante l'utilizzo del controllo DatagridView con il quale andremo a salvare l'immagine presente in una colonna della griglia.
Come si vede dal frammento di codice precedente, la funzione ha tre parametri, uno di tipo image, utilizzato poi da una classe di tipo “Bitmap, due parametri di tipo int, riguardante l’altezza e larghezza, ed infine il percorso e nome file dove salvare il file, tramite la classe Bitmap.
Se passiamo in visualizzazione design, tramite la finestra delle proprietà del controllo datagrid, possiamo gestire l’evento che permette di visualizzare una finestra per indicare all’utente il percorso e nome del file che si vuole salvare sul pc.
L’evento per gestire il click all’interno della cella è “CellContentClick” se facciamo doppio click, si passerà in visualizzazione codice, a questo punto verifichiamo se la cella è vuota o no, indicando il numero di riga e numero di colonna, e poi procedere al relativo salvataggio.
Verrà creato un oggetto di tipo SaveFileDialog, con il quale andremo ad impostare alcune proprietà che permettono il salvataggio dei file in formato immagine.
Inoltre si converte il contenuto della cella qualora è valorizzato in un oggetto di tipo “Image”
Verrà richiamata la funzione per ridefinire l’immagine, in modo viene generato senza problemi.
Qui di seguito si riporta il codice delle suddette dichiarazioni.


VB.Net

Private Sub dataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridView1.CellContentClick

        If e.ColumnIndex = 2 Then

 

            If dataGridView1.Rows(e.RowIndex).Cells(2).Value IsNot Nothing Then

                Dim salvaFile As SaveFileDialog = New SaveFileDialog()

                salvaFile.Filter = "Immagine(.JPG)|*.jpg"

                salvaFile.Title = "Salva file sul pc"

                salvaFile.CheckPathExists = True

 

                If salvaFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then

                    Dim ImmagineRilevata As Image = (TryCast(dataGridView1.Rows(e.RowIndex).Cells(2).Value, Image))

                    RidefinisciImmagine(ImmagineRilevata, ImmagineRilevata.Height, ImmagineRilevata.Width, salvaFile.FileName)

                End If

            End If

        End If

    End Sub

 

 

 

 

 

 

C#

 

  private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

        {

            if (e.ColumnIndex == 2)

            {

                if (dataGridView1.Rows[e.RowIndex].Cells[2].Value != null)

                {

                    SaveFileDialog salvaFile = new SaveFileDialog();

                    salvaFile.Filter = "Immagine(.JPG)|*.jpg";

                    salvaFile.Title = "Salva file sul pc";

                    salvaFile.CheckPathExists = true;

                    if (salvaFile.ShowDialog()== System.Windows.Forms.DialogResult.OK)

                    {

                         

                        Image ImmagineRilevata = (dataGridView1.Rows[e.RowIndex].Cells[2].Value as Image);

 

                        RidefinisciImmagine(ImmagineRilevata, ImmagineRilevata.Height, ImmagineRilevata.Width, salvaFile.FileName);

                      

                       

                    }

                  

 

 

                }

                

               

            }

        }



Siamo giunti alla conclusione della stesura del codice, ora dovremmo scrivere le istruzioni per caricare la griglia.
Qui di seguito il codice, supponendo di avere una nostra immagine nel nostro computer.
Il frammento di codice è molto semplice, perché simula una fonte dati.
L’esecuzione del codice, avviene nell’evento Load della nostra form, naturalmente in una riga abbiamo lo stream dell’immagine, relativo ad un file che abbiamo sul nostro pc, mentre nell’altra no, per verificare se la cella è vuota oppure valorizzata.
Verrà richiamata la funzione GetImmagine, per trasformare un array byte (di solito presente in una base dati) in un classe di tipo “Image”.
Qui di seguito l’esempio di codice per entrambi i linguaggi.





VB.Net

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim ListOggetti As List(Of OggettoNuovo) = New List(Of OggettoNuovo)()

        Dim oggetto As OggettoNuovo = New OggettoNuovo()

        oggetto.nome = "Emanuele"

        oggetto.Cognome = "Mattei   "

        oggetto.Immagine = File.ReadAllBytes("D:\test.jpg")

        ListOggetti.Add(oggetto)

        oggetto = New OggettoNuovo()

        oggetto.nome = "Luigi"

        oggetto.Cognome = "Cristaldi"

        ListOggetti.Add(oggetto)

        Dim risultato = (From dati In ListOggetti Select New With {Key .Nominativo = dati.nome, Key .CognomeNominativo = dati.Cognome, Key .Foto = If(dati.Immagine Is Nothing, Nothing, getImmagine(dati.Immagine))})

        dataGridView1.RowTemplate.Height = 100

        dataGridView1.AutoGenerateColumns = False

        dataGridView1.Columns(0).ValueType = GetType(String)

        dataGridView1.DataSource = risultato.ToList()

    End Sub

 

C#

private void Form1_Load(object sender, EventArgs e)

        {

 

            List<OggettoNuovo> ListOggetti = new List<OggettoNuovo>();

            OggettoNuovo oggetto = new OggettoNuovo();

           oggetto.nome = "Emanuele";

            oggetto.Cognome = "Mattei   ";

            oggetto.Immagine = File.ReadAllBytes("D:\\test.jpg");

 

 

            ListOggetti.Add(oggetto);

            oggetto = new OggettoNuovo();

            oggetto.nome = "Luigi";

            oggetto.Cognome = "Cristaldi";

            ListOggetti.Add(oggetto);

 

            var risultato = (from dati in ListOggetti

                             select new

                             {

                                 Nominativo = dati.nome,

                                 CognomeNominativo = dati.Cognome,

                                 Foto = dati.Immagine==null?null:getImmagine(dati.Immagine)

 

                             });

            dataGridView1.RowTemplate.Height = 100;

            dataGridView1.AutoGenerateColumns = false;

            dataGridView1.Columns[0].ValueType = typeof(string);

            dataGridView1.DataSource = risultato.ToList();

           

          

 

 

 

        }





Conclusioni

L’articolo ha voluto fornire informazioni sull’utilizzo del controllo DatagridView in ambiente Windows Application, il quale si presenta in maniera semplice e flessibile sulla gestione dei dati.
Un controllo, al quale il programmatore può sfruttare le numerose funzionalità messe a disposizione ed al tempo stesso estendere quelli presenti, anche se il controllo ha numerose proprietà e funzioni.
Abbiamo voluto illustrare di come nelle nostre applicazioni di tipo gestionali possiamo offrire all’utente un’interfaccia amichevole e con la possibilità di vedere rapidamente le informazioni richieste.

Qui http://emanuelemattei.blogspot.com/2019/06/datagridview-salvare-da-una-colonna.html la prima parte di questo articolo

Nessun commento: