Sorgente dati di 1 form = dati filtrati presenti in datagrid

di il
1 risposte

Sorgente dati di 1 form = dati filtrati presenti in datagrid

Vi spiego in dettaglio cosa vorrei fare:
ho una datagridview popolata con dei record del mio database filtrati in base ad una query.
Effettuando un doubleclick su ogni riga della datagridview faccio aprire una form (che chiamerò articoli_mod) per la modifica del record su cui ho effettuato il doppio click.
Fin qui tutto ok.
Nella form articoli_mod vorrei inserire un controllo binding navigator per navigare tra i records filtrati presenti nella datagridview di partenza, sulla quale ho effettuato doppio click.
Come posso fare a dire al binding navigator di navigare tra i dati della datagridview di partenza da cui ho effettuato il doppio click per l'apertura della maschera?
Grazie a chiunque possa darmi un aiuto in tal senso.


Snippet che filtra i dati all'interno della datagridview in base alla query q sul datacontext:
idc = new InesDBDataContext();
            q = from c in idc.tb_articoli
                select c;
...
listaArticoli.griglia.Columns.Insert(1, Col_idArticolo);
            listaArticoli.griglia.Columns.Insert(2, Col_nome);
            listaArticoli.griglia.Columns.Insert(3, Col_prezzo);
            listaArticoli.griglia.Columns.Insert(4, Col_fornitore);
            
            myBindingSource.DataSource = q;
            listaArticoli.griglia.DataSource = myBindingSource;

Snippet del doppio click su datagridview:
private void griglia_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int id_articolo = (int)listaArticoli.griglia.Rows[e.RowIndex].Cells["id_articolo"].Value;
            if (id_articolo >0)
            {
                DataGridViewRow currRow = new DataGridViewRow();
                currRow=listaArticoli.griglia.SelectedRows[0];

                articoli_mod am = new articoli_mod();
                am.Text = "Modifica Articolo";
                am.txtNome.Text = currRow.Cells["nome"].Value.ToString();
                am.txtPrezzo.Text = currRow.Cells["prezzo"].Value.ToString();
                am.cbFornitore.DataSource = from f in idc.tb_fornitori select f;
                am.cbFornitore.SelectedValue = currRow.Cells["fornitore"].Value;

                if (am.ShowDialog(this) == DialogResult.OK)
                {
                    currRow.Cells["nome"].Value = am.txtNome.Text;
                    currRow.Cells["prezzo"].Value = am.txtPrezzo.Text;
                    currRow.Cells["fornitore"].Value = am.cbFornitore.SelectedValue.ToString();
                }

            }
        }

Il problema è anche il seguente:

potrei avere una datagridview di partenza che fa il join tra più tabelle del database.
Ad esempio:
ho una datagridview i cui records sono articoli con le colonne id articolo, nome articolo e prezzo articolo prese dalla tabella articoli, ma con le colonne quantità in magazzino, ultimo prezzo di carico, nome fornitore che sono frutto di join con altre tabelle.
Effettuando il double click sul record della datagridview, e quindi aprendo la form articoli_mod per la modifica articolo, sicuramente avrei problemi per la presenza dei join nella datagridview di partenza.

Inoltre, se l'utente cambiasse l'ordinamento dei records nella datagridview di partenza (cliccando sugli headers delle colonne), tale ordinamento modificherebbe la visualizzazione della griglia, ma non modificherebbe il bindingsource, e quindi scorrendo con il bindingnavigator nella form articoli_mod, l'ordine degli articoli sarebbe errato.

Help me, please...

1 Risposte

  • Re: Sorgente dati di 1 form = dati filtrati presenti in datagrid

    Ciao,
    posso dire di essere nella tua stessa situazione, visto e considerato che stiamo lavorando anche sugli stessi codici (quello è flexgrid giusto?)
    Ho un bel problema riguardante l'evento doubleclick, che a quanto ho letto nel tuo intervento hai risolto o cmq non hai avuto problemi.
    Io ho due Form. Nel primo (Form1) è presente il Datagrid con alcuni campi del database e le varie opzioni di ricerca. Tramite l'evento dblclick voglio aprire il secondo Form (Form2) che contiene la scheda completa dell'utente, con i vari textbox e i command di modifica, eliminazione e aggiunta schede. Il problema, che non riesco a superare, è capire come diavolo posso innanzitutto ricavare dall'evento dblclick l'id del record, e poi passare questo dato al Form2 per fare la query che richiama la scheda completa.

    Potresti darmi una mano? Sono abbastanza disperato, perchè mi manca solo questo per finire il mio programma.

    Ti ringrazio in anticipo e mi scuso di non poterti essere tanto di aiuto per il tuo problema, sinceramente non ho capito benissimo cosa non riesci a fare.
Devi accedere o registrarti per scrivere nel forum
1 risposte