Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C#] Popolare una ListView da un altro form

    Salve, mi servirebbe di popolare una ListView da un Form diverso di dove si trova, cioe:

    la mia struttura:
    codice:
    Form - Form1: MdiContainer = form contenitore classico...
    Form - Chiamate                = form contenente la ListView
    Form - Impostazioni            = form dove posso aggiungere altri Item che poi devono essere visti anche nella ListView del form 'Chiamate'
    
    Classe - DbManager            = classe dove gestisco tutte le Query, contiene tutti i metodi che popolano anche la ListView su 'Chiamate'
    quello che faccio io ora per Popolare la ListView:
    dal Form "Chiamate" all'apertura passo l'Object: "ListViewChiamate" nella chiamata del metodo "PopolaChiamate(ListViewChiamate);" e la Classe DbManager mi popola quell'oggetto.

    ma se io setto qualcosa da un altro Form e poi vengo a vedere il Form "Chiamate" deve essere stato già "Re-Popolato" diciamo.... nel momento che ho salvato la nuova impostazione, giusto ???

    non so come fare a Popolare da un form all'altro....

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non ho capito molto bene il problema, più che altro l'organizzazione del progetto, ad ogni modo non mi sembra sia necessario "popolare" elementi da Form differenti: se hai un Form che visualizza un set di dati, immagazzinato su un DB o qualsiasi altro dispositivo di memorizzazione, ti è sufficiente ricaricare quei dati dal Form preposto alla loro visualizzazione quando la finestra secondaria che ne permette la modifica viene chiusa.

    Questo vale ovviamente se la finestra secondaria di cui si parla è modale.

    In caso contrario, devi implementare un meccanismo simile al Design Pattern Observer: la finestra che modifica i dati deve poter conoscere le altre finestre che forniscono una vista sui dati modificati, e provvedere ad avvertirle quando questi vengono alterati.

    Insomma, si tratta di architetture non molto complesse ma che richiedono comunque una certa serie di considerazioni preliminari e una padronanza minima della programmazione ad oggetti, non ultima un preciso "disegno" dal punto di vista dell'applicazione, con la corretta attribuzione delle responsabilità a ciascun elemento che compone l'interfaccia visuale.

    Magari descrivi meglio, o con un quadro più ampio, ciò che il tuo programma deve fare, così sarà possibile suggerire la migliore impostazione, che non è detto che necessariamente debba svolgersi nel modo che hai descritto (e che ti dà problemi).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Il programma e suddiviso in questi Form:

    Form1: il quale è un MdiContainer,
    nel Form1 ho applicto un menu di tipo "ToolStrip" che mi premettera di Swiccare tra i Form Contenuti

    Dentro al Form1:
    FormTelefonate: contiene un motore di ricerca e una ListView dove elenca le telefonate fatte.
    FormImpostazioni: si settano tutte le impostazioni del programma, e si aggiungono anche degli Item che poi si ritrovano nel motore di ricerca del "FromTelefonate".
    Altri-Form ................

    Nel Progetto ho una Classe "DbManager" nella quale è contenuto tutto il codice per "INSERIMENTI, MODIFICHE, ELIMINAZIONI, POPOLAZIONE-ListView" insomma tutte le Query,
    come fanno queste query a sapere cosa Popolare o dove prendere i dati da modificare ???
    Gli passo io l'Istanza dello strumento da controllare, cioè:

    Su "DbManager":
    codice:
            public bool PopolaCamere(ListView obj)
            {
                if (m_oConn.State != ConnectionState.Open) return false;
    
                DataSet oDataSet = new DataSet();
                ListViewItem li;
    
                OleDbDataAdapter oDataAdapter = new OleDbDataAdapter("SELECT " +
                                                                                "camere.iID," +
                                                                                "camere.sCamera," +
                                                                                "tariffazioni.iID_Camera " +
                                                                                "FROM camere " +
                                                                                "LEFT JOIN tariffazioni ON (camere.iID = tariffazioni.iID_Camera) " +
                                                                                "GROUP BY camere.iID, camere.sCamera, tariffazioni.iID_Camera " +
                                                                                "ORDER BY camere.iID ASC;", m_oConn);
    
                try
                {
                    oDataAdapter.Fill(oDataSet, "camere");
                }
                catch
                {
                    return false;
                }
    
                DataTable oDataTable = oDataSet.Tables["camere"];
    
                obj.Items.Clear();
    
                foreach (DataRow oDataRow in oDataTable.Rows)
                {
                    li = obj.Items.Add(oDataRow["iID"].ToString());
                    li.SubItems.Add(oDataRow["sCamera"].ToString());
    
                    if (oDataRow.IsNull("iID_Camera"))
                    {
                        li.ForeColor = Color.Red;
                    }
                    else
                    {
                        li.ForeColor = Color.Black;
                    }
                }
    
                return true;
            }

    la chiamata dal "FormImpostazioni":
    codice:
    DbManager oDbManager = new DbManager();
    
    if (!oDbManager.PopolaCamere(lvCamere))
    {
        MessageBox.Show("Si è verificato un errore durante il caricamento delle Camere.", "Errore!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    "lvCamere" è la "ListView" contenente un elenco di camere.

  4. #4
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    io ti consiglierei di usare una bella classe
    e di metterci il metodo che carica la listview

    in questo modo la puoi anche riutilizzare per altri scopi, e non ti incasini la vita passando parametri da form a form
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  5. #5
    ma "DbManager" è una classe, solo che come faccio a fargli vedere la ListView da popolare se non la passo dalla chiamata ?

  6. #6
    Crea un evento nell'oggetto che modifica i dati che venga generato all'OnChanged dei dati medesimi... poi gli associ un handler che richiami una funzione della classe che gestisce la ListView in maniera da fargli fare il refresh dei dati
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.