none
Impossibile recuperare i dati da gridview dinamico

    Domanda

  • Ciao a tutti
    Ho creato un gridview con numero di celle che non era noto. Per far questo ho passato una struttura dati di questo tipo:
    List<tipoGiorno> giorni
    {
       string colonna;
       string titolo;
       List<tipoRowTariffa >tariffe
       {
         decimal Costo;
         string Livello;  
        }
    }

    Quando passo questi dati, il gridview mi crea in automatico solo le celle per colonna e titolo, mentre devo creare io le altre celle:

    protected void grwTariffa_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Visible = false;
            }
            else if (e.Row.RowType == DataControlRowType.DataRow)
            {
                tipoRowTariffa item = (tipoRowTariffa)e.Row.DataItem;
               
                if (item != null)
                {
                    e.Row.Cells[0].Visible = false;
                   
                    foreach (tipoDatiTariffa cell in item.Giorni)
                        e.Row.Cells.Add(new TableCell());
                }
            }
        }


    e all'interno delle celle devo inserire delle textbox:

    protected void grwTariffa_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                tipoRowTariffa dati = (tipoRowTariffa)e.Row.DataItem;
    
                List<TableCell> row = new List<TableCell>();
                TableCell cell = new TableCell();
    
                tipoDatiTariffa day_dati = new tipoDatiTariffa();
                int i = 0;
                switch (e.Row.Cells[0].Text)
                {                
                    case "tariffa":
                        i = 2;
                        foreach (DateTime day in dati.Giorni.Select(item => item.Giorno))
                        {
                            day_dati = dati.Giorni.Find(item => item.Giorno == day);
    
                            TextBox txt = new TextBox();
                            txt.ID = "txtTariffa";
                            txt.Text =  day_dati.Costo.ToString();
                            e.Row.Cells[i].Controls.Add(txt);
                            i++;
                        }
                        break;               
                }
            }
        }

    Dopo che l'utente ha modificato i dati nella textbox, vorrei recuperare i dati e salvarli nel db, ma quando provo a leggere le celle del gridview al postback, ho solo 2 celle: colonna e titolo. Perdo tutte le celle che ho creato in RowCreated.
    Ho provato a inserire il DataBind del gridview fuori dal !Page.IsPostBack, ma ricevo un errore perchè le textbox esistono già.

    Come posso recuperare i dati presenti nel gridview?
    La procedura di creazione del gridview è esatta?
    Grazie mille

    giovedì 27 febbraio 2014 16:51

Risposte

  • Prova a creare la tua tabella custom all'interno dell'evento rowdatabound anzichè nel rowcreated.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    • Contrassegnato come risposta SviPla venerdì 28 febbraio 2014 11:53
    venerdì 28 febbraio 2014 11:02

Tutte le risposte

  • Prova a creare la tua tabella custom all'interno dell'evento rowdatabound anzichè nel rowcreated.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    • Contrassegnato come risposta SviPla venerdì 28 febbraio 2014 11:53
    venerdì 28 febbraio 2014 11:02
  • Ora funziona.

    Posso chiederti perchè ora che ho spostato il codice funziona?

    venerdì 28 febbraio 2014 11:54