15 messaggi dal 07 novembre 2007
Salve a tutti... HO UN PROBLEMA!
Genero una pagina aspx che crea una tabella Html contenente in ogni cella una textbox in cui devo inserire dei dati.

Ho adesso per farvi capire una serie di righe contenenti dei cantieri e la colonne che contengono i giorni del mese.

Alcune textbox si riempono da sole in base ai dati in un db, ma possono essere modificate, le altre sono vuote.

Queste textbox sono indicizzate in due arraylist di arraylist (dall'array dei cantieri accedo all'array delle celle di ogni giorno).

Il problema (credo io) è che quando devo aggiornare i dati nel db delle celle modificate, visto che nella pagina le ho aggiunte con controls.add(), non sono + le stesse che ho salvato negli arraylist(visto che con quelle riesco a lavorare...) ma una copia. Quindi lavorando cambio solo il testo delle copie.

Non so più che fare... se devo aggiungere un pò di codice ditemelo, provvedo.
Ringrazio anticipatamente chiunque mi risponda!
un pò di codice servirebbe, comunque partiamo dal principio

devi fare due cose la prima naturalmente ricreare la collezione dei controlli ad ogni postback, questo sempre.

per quanto rigurada i dati se non vuoi sovrascivere eventuali modifiche eseguite dall'utente, devi ricaricare la fonte dat solo in determinate circostane, ad esempi la pressione di un pulsate o al primo caricamente della pagina.

se pensi di aver fatto tutto questo posta parte del codice che gli diamo un occhiata

ciao marco

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

http://nostromo.spaces.live.com/default.aspx
15 messaggi dal 07 novembre 2007
Grazie Marco, il codice è un po lungo... i dati sono salvati in arraylist statici

static ArrayList idCantieri = new ArrayList();
static ArrayList nomeCantieri = new ArrayList();
static ArrayList oreCantieri = new ArrayList();

sono riempiti da db (OreNelCantiere è una classe che contiene una textbox)


        connessioneComMon.Open();
        drLettore = cmdComando.ExecuteReader();
        DateTime giornoAttuale = inizioFoglioOre;
        int cantiereAttuale = -1;
        if (drLettore.HasRows)
        {
            int indiceRighe = -1;
            while (drLettore.Read())
            {
                int cantiereLettore = drLettore.GetInt32(0);
                DateTime dataLettore = drLettore.GetDateTime(1);
                if (cantiereLettore == cantiereAttuale)
                {
                    while (dataLettore > giornoAttuale)
                    {
                        // inserisci cella vuota
                        OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
                        ((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
                        // ---
                        giornoAttuale = giornoAttuale.AddDays(1);
                    }
                    // inserisci ore lettore
                    OreNelCantiere oNCe = new OreNelCantiere(cantiereLettore, dataLettore, drLettore.GetDouble(2));
                    ((ArrayList)oreCantieri[indiceRighe]).Add(oNCe);
                    // ---
                    giornoAttuale = giornoAttuale.AddDays(1);
                }
                else
                {
                    if (giornoAttuale > inizioFoglioOre)
                    {
                        while (giornoAttuale <= fineFoglioOre)
                        {
                            // inserisci cella vuota
                            OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
                            ((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
                            // ---
                            giornoAttuale = giornoAttuale.AddDays(1);
                        }
                        giornoAttuale = inizioFoglioOre;
                    }
                    cantiereAttuale = cantiereLettore;
                    // inserisci nuova riga
                    idCantieri.Add(cantiereAttuale);
                    nomeCantieri.Add(drLettore.GetString(3));
                    ArrayList nuovoOreCantiere = new ArrayList();
                    oreCantieri.Add(nuovoOreCantiere);
                    indiceRighe++;
                    // ---
                    while (dataLettore > giornoAttuale)
                    {
                        // inserisci cella vuota
                        OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
                        ((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
                        // ---
                        giornoAttuale = giornoAttuale.AddDays(1);
                    }
                    // inserisci ore lettore
                    OreNelCantiere oNCe = new OreNelCantiere(cantiereLettore, dataLettore, drLettore.GetDouble(2));
                    ((ArrayList)oreCantieri[indiceRighe]).Add(oNCe);
                    // ---
                    giornoAttuale = giornoAttuale.AddDays(1);
                }
            }
            while (giornoAttuale <= fineFoglioOre)
            {
                // inserisci cella vuota
                OreNelCantiere oNC = new OreNelCantiere(cantiereAttuale, giornoAttuale);
                ((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
                // ---
                giornoAttuale = giornoAttuale.AddDays(1);
            }
        }
        drLettore.Close();
        connessioneComMon.Close();


e da qui genero la tabella



       int indiceRiga = 0;
        foreach (int idCantiere in idCantieri)
        {
            HtmlTableRow rigaTabella = new HtmlTableRow();
            HtmlTableCell cellaCantiere = new HtmlTableCell();
            Label lblNomeCantiere = new Label();
            lblNomeCantiere.Text = nomeCantieri[indiceRiga].ToString();
            lblNomeCantiere.Width = 200;
            cellaCantiere.Controls.Add(lblNomeCantiere);
            if (indiceRiga % 2 == 0) cellaCantiere.BgColor = "ffffa0";
            rigaTabella.Controls.Add(cellaCantiere);

            foreach (OreNelCantiere oNC in ((ArrayList)oreCantieri[indiceRiga]))
            {
                HtmlTableCell cellaTabella = new HtmlTableCell();
                if (indiceRiga % 2 == 0) cellaTabella.BgColor = "ffffa0";
                if (oNC.DataPrestazione.DayOfWeek == DayOfWeek.Saturday) cellaTabella.BgColor = "ffcc66";
                if (oNC.DataPrestazione.DayOfWeek == DayOfWeek.Sunday) cellaTabella.BgColor = "ffbb66";
                cellaTabella.Controls.Add(oNC.Casella);
                cellaTabella.Controls.Add(oNC.Validatore);
                rigaTabella.Controls.Add(cellaTabella);
            }
            tabellaFoglioOre.Controls.Add(rigaTabella);
            indiceRiga++;
        }
        tabellaFoglioOre.Border = 1;
        tabellaFoglioOre.BorderColor = "Silver";
        tabellaFoglioOre.CellSpacing = 0;
        this.FoglioOre.Controls.Add(tabellaFoglioOre);






Da qui non recupero + le textbox che ho sulla pagina, perche credo siano delle copie di quelle dentro gli array
come hai detto è un pò lunghetto, appena ho tempo gli do un occhiata

ciao marco

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

http://nostromo.spaces.live.com/default.aspx

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.