[RISOLTO]Inserire ComboBox in Datable

di il
5 risposte

[RISOLTO]Inserire ComboBox in Datable

Buonasera a tutti, grazie ai vostri consigli sto facendo altri passetti avanti.
Quasi in autonomia sono riuscito a crearmi dei filtri (per data e per testo), salvare e stampare la mia DataGridView.
Ora però mi sono bloccato su quello che dovrei fare come da oggetto di questo argomento, cioè inserire una combobox nella mia DataTable (dtMagazzino) ed inserirne dei dati "precompilati".
La prima parte sono riuscito a farlo :
 dtMagazzino.Columns.Add("Combo", typeof(ComboBox)); 
Però ora non riesco a capire come inserire (da codice) le possibili scelte.
Ho visto che lo potrei fare direttamente sulla DataGridView (collegata alla DataTable), andando ad inserire una colonna di tipo combobox e popolarne il campo Items ma non è quello che non vorrei fare in quanto poi sembra che non si aggiorna sulla DataTable.
Sto quindi cercando di trovare il modo di farlo da codice dopo aver appunto inserito la combobox con il codice scritto sopra .
Avete magari qualche suggerimento su come fare? Magari creare un'altra DataTable con i dati che io vogli appaiano come scelta sulla combox della DataTable principale?
Grazie ancora, buona serata

5 Risposte

  • Re: [RISOLTO]Inserire ComboBox in Datable

    Stai facendo confusione di concetti.
    La ComboBox la puoi aggiungere solo alla DGV, non alla DataTable. Leggi sempre di un metodo e approfondisci i parametri. Come puoi vedere da questo link, il tipo ComboBox non è supportato.

    Mostra il codice che hai scritto per popolare la DataGridViewComboBoxColumn, e cerchiamo di capire perché i valori non si aggiornano.
  • Re: [RISOLTO]Inserire ComboBox in Datable

    Ciao, Sgrubak, grazie come sempre delle tue "imbeccate"

    Ma se come dici tu:

    Sgrubak ha scritto:


    Stai facendo confusione di concetti.
    La ComboBox la puoi aggiungere solo alla DGV, non alla DataTable.
    Perchè il codice mi da la possibilità di scegliere ComboBox come tipo di colonna (anche se effettivamente non inserito nell'elenco che tu mi hai indicato ?
    Il C# mi fa anche gli inganni allora
  • Re: [RISOLTO]Inserire ComboBox in Datable

    Sgrubak ha scritto:


    Mostra il codice che hai scritto per popolare la DataGridViewComboBoxColumn, e cerchiamo di capire perché i valori non si aggiornano.
    Ciao ,come dicevo io cercavo di compilare la combo (aspettandomi un qualche .Items) dopo averla inserita in DataTable( e qui colpa di C # che mi fa gli scherzi lasciandomela inserire .. ed in effetti poi mi appariva come colonna nella DataGridView dataGridView1 associata alla DataTable dtRegistro).
    Premetto che, sulla dataGridView1 non ho inserito (ne da da codice ne da finestra Progettazione) nessuna colonna, si creano in automatico dopo che associo la datagridview1 alla dtRegistro.

    Quindi ora ho fatto un passo indietro inserendola (la combobox e solo quella colonna lì) direttamente da codice sulla DatagridView1, il codice che ho usato è questo :
    DataGridViewComboBoxColumn dgvCmb = new DataGridViewComboBoxColumn();
                    dgvCmb.HeaderText = "Combo";
                    dgvCmb.Items.Add("1");
                    dgvCmb.Items.Add("2");
                    dgvCmb.Items.Add("3");
                    dgvCmb.Items.Add("4");
                    dgvCmb.Name = "cmbCombo";
                    dataGridView1.Columns.Add(dgvCmb);
    E confermo che mi appare (durante l'esecuzione dell'applicazione), con le relative possibilità di scelta ( 1 ,2, 3, 4), selezionabile etc etc .(poi ci sarebbe il problema di farla apparire nel punto giusto e non in fondo ma un passo alla volta).
    Quando però vado a salvare (o meglio dire esportare) il tutto attraverso il codice :
    dtRegistro.WriteXml(@"C:\CartellaProva\RegistroEntrateUscite.xml");

    e poi reimportare :
    dtRegistro.ReadXml(@"C:\CartellaProva\RegistroEntrateUscite.xml");
    non mi reimporta i valori che io avevo selezionato nelle varie celle della colonna dove ho la ComboBox, come appunto se la DtRegistro non si aggiorna con le modifiche fatte (durante l'esecuzione dell'applicazione) sulla colonna del Combobox ( se modifco altre cose sulle altre colonne invece tutto ok).
    Questo perché (presumo) non ho nessun riferimento di tipo ComboBox nella DataTable (non avendolo potuto inserire a codice).

    " L'associazione " DataTable / DataGridView la faccio tramite queste due righe :
    bsFiltro.DataSource = dtRegistro; //bindingsource 
    dataGridView1.DataSource = bsFiltro; 
    Dovrei allora trovare un metodo simile al :
    dtRegistro.WriteXml(@"C:\CartellaProva\RegistroEntrateUscite.xml");

    ma che funzioni sulla DataGridView e non sul DataTable.

    Vi confermo anche se io utilizzo per esempio i filtri che ho creato, e poi esporto/reimporto, funziona perfettamente, a conferma che le modifiche fatte sulla dataGridView1 su ripercuotono positivamente sulla dtRegistro ,tranne appunto quelle sulla Combobox.

    Esempio di due filtri che ho inserito che lavorano sulla colonna "Data" (magari sono utili a qualcuno ):
     private void dateTimePickerDal_ValueChanged(object sender, EventArgs e) //questo mi mostro solo le cose registrate dalla data scelta in avanti
            {            
                bsFiltro.Filter = "Data >= '" +  dateTimePickerDal.Value.Date + "'";            
            }
     private void dateTimePickerIl_ValueChanged(object sender, EventArgs e)  //questo mi mostro solo le cose registrate nella data scelta
            {
                bsFiltro.Filter = "Data = '" + dateTimePickerIl.Value.Date + "'";
            }
    EDIT messaggio.
    Per poter decidere in che punto fa apparire la mia colonna Combo, uso questo codice :
    dgvCmb.DisplayIndex = 7  // viene inserita dopo 7 colonne  ;
  • Re: [RISOLTO]Inserire ComboBox in Datable

    Vai con calma...
    Aggiungi un campo alla DataTable in cui memorizzare il dato. Se non c'è, non esporta/importa nulla dato che i metodi sono suoi e non della DGV.
    Tu devi concentrarti sul concetto che l'xml salna i dati della tabella e la dgv mostra i dati della tabella. Come puoi notare, la dgv e l'xml proprio non comunicano. Non sanno niente l'uno dell'altro ed è giusto che sia così. Potresti usare altre tecniche per salvare i dati (ad esempio un json o un DB) e la dgv funzionerebbe lo stesso.
    Mi spiego?

    Ora che hai il campo, sai che nell'xml ci sarà, quindi ci occupiamo della dgv. Tu hai aggiunto la colonna, e hai messo i valori possibili che ti interessano, ma devi anche dire alla colonna della dgv quale colonna della datatable deve "gestire".
    Per farlo devi usare la proprietà DataPropertyName. Quando imposti la colonna, imposta anche questa proprietà e poi fai l'Add. Dopo provi e dovrebbe funzionare. Purtroppo non ho il pc sotto mano per provare.
  • Re: [RISOLTO]Inserire ComboBox in Datable

    Ciao, scusa il ritardo.
    Sembra funzionare, ho utilizzato la Progettazione (quindi non su codice) per comporre la DataGridview per come serve a me inserendo quindi appunto tutte le colonne che mi servono e modificandone gli attributi ( larghezza, disposizione colonne, valori delle combobox etc etc). Sempre da progettazione ho modificato l'attributo DataPropertyName inserendo quindi il nome delle varie colonne della DataTable. Ho poi fatto qualche altra modifica "fisiologica" dovuta a questo cambiamento di approccio ma va. Ho inoltre fatto qualche altro passetto in avanti come l'esportazione su Excel , su PDF e invio tramite mail (usando direttamente Microsoft.Office.Interop.Outlook ), cancellazione di righe. Ora proseguo (o almeno ci provo ) con le altre parti che voglio provare a fare .
    Grazie ancora per l'aiuto.
    Buona serata
Devi accedere o registrarti per scrivere nel forum
5 risposte