12 messaggi dal 14 giugno 2007
Ciao a tutti!
E' da poco che ho messo mano sul framework .NET, per cui non sono molto pratico.
Vi dico il mio problema...in una pagina ho bisogno di una grigla gerarchica a 3 livelli. Prendo dati da un database...diciamo che ho distinta che contiene più ordini, che contiene più righe...la mia intenzione era quella di utilizzare 3 gridview, una per fare la bind di distinte, una per la bind di ordini e una per la bind di righe. La prima gridview è creata in design-time. In questa ho autogeneratecolumns = false e mi sono creato un buttonfield select con testo "+". Sull'evento SelectIndexChanged controllo se il text del selectbutton è + o -...se è + lo metto a - e viceversa, e mi salvo su una variabile il valore di una colonna nascosta (indica il codice distinta, per legarla poi a ordine, la prima sottogriglia)...e ricarico la griglia. Controllo se il testo del bottone è + o -. Se è -, devo esplodere la sottogriglia. mi creo il datasource dinamicamente (query con condizioni di where su codice distinta) e mi creo questa sottogriglia in questo modo:
GridView gvOrdineDistinta = new GridView();

gvOrdineDistinta.SelectedIndexChanged += new EventHandler(gvOrdineDistinta_SelectedIndexChanged);
gvOrdineDistinta.RowDataBound += new GridViewRowEventHandler(gvOrdineDistinta_RowDataBound);

//aspetto della sottogriglia
...
...setto qualche proprietà per l'aspetto...
...
gvRigaDistinta.AutoGenerateColumns = false;
CommandField cf = new CommandField();
cf.ButtonType = ButtonType.Link;
cf.SelectText = "+";
cf.ShowSelectButton = true;
cf.ControlStyle.Font.Underline = false;
gvOrdineDistinta.Columns.Add(cf);
BoundField bf = new BoundField();
bf.HeaderText = "ID";
bf.DataField = "ID";
bf.Visible = false;
gvOrdineDistinta.Columns.Add(bf);
bf = new BoundField();
bf.HeaderText = "Fornitore";
bf.DataField = "RagioneSociale";
bf.ItemStyle.Wrap = true;
bf.Visible = true;
gvOrdineDistinta.Columns.Add(bf);
ecc ecc

Poi ho ovviamente l'evento:
void gvOrdineDistinta_SelectedIndexChanged(object sender, EventArgs e)
{

}

Il problema è che non mi entra qui dentro...
Mi spiego...carica la pagina...ho una sola griglia al momento. Clicco sul + del selectbutton, la pagina viene ricaricata, al posto del + ho il - e in una colonna della griglia mi esplode la sottogriglia (quella di ordini)...anch'essa ha un selectButton con il testo "+", ma se clicco lì non riesco a far partire l'evento SelectedIndexChanged...temo che l'index mi rimanga a -1.
Qualcuno di voi ha un'idea del perchè? Sbaglio qualcosa nella creazione dinamica della sottogriglia, tipo il commandField?
Grazie per l'attenzione...
devi ricreare i controlli ad ogni PostBack o vero devi rieseguire il codice da quà :

GridView gvOrdineDistinta = new GridView();

in poi.

per semplkificare forse è meglio che già definiscri a design time i 3 livelli e poi gestisci la visibilità.

occhio che con 3 GridView il ViewState rischia di diventare pachidermico.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
12 messaggi dal 14 giugno 2007
nell'evento selectedindexchange della sottogriglia ho solo aggiunto:
label1.Text = "ciao";
In teoria, cliccando sulla colonna col select button, prima di eseguire una postback, deve andarmi a modificare il testo della label...invece, ho provato anche con un breackpoint, non entra per niente in selectedindexchange...la pageload la dovrebbe fare dopo (con la postback) aver modificato il testo della label...la cosa che mi viene in mente è che sbaglio qualcosa nel crearmi dinamicamente il buttofield...

Comunque grazie, l'idea di utilizzare le 3 griglie in design-time è buona...l'unico problema, credo sia che se ho una riga della griglia esplosa, e seleziono un'altra riga da esplodere, la prima riga esplosa che contiene la sottogriglia collassa, credo...non posso avere 2 sottogriglie dello stesso livello aperte...almeno così mi viene in mente a naso.
Grazie comunque, ora provo.
Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.