Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Mantenere i dati nella Table dopo postback

    Ciao a tutti! Ho una Table e in Page_Load la popolo con delle TableRow che contengono alcuni controlli tra i quali un TextBox con abilitato il gestore dell'evento TextChanged ed AutoPostback è true. Il problema è questo quando cambio il testo del TextBox viene generato il postback ma le righe della tabella spariscono e l'evento TextChanged non viene gestito.
    Il ViewState della tabella è abilitato. Come faccio a mantenere le righe della tabella con tutti i controlli inseriti tra un postback e l'altro?
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    puoi postare il codice del page_load()?

  3. #3
    Originariamente inviato da GabbOne
    puoi postare il codice del page_load()?
    Ecco il codice:
    Codice PHP:
    protected void Page_Load(object senderEventArgs e)
    {
        if (!
    Page.IsPostback)
            
    VisualizzaTabella();
    }

    protected 
    void VisualizzaTabella()
    {
        
    TableRow tr = new TableRow();
        
    Table.Rows.Add(tr);
        
    TableCell tdElimina = new TableCell();
        
    tdElimina.CssClass "DatiArticolo";
        
    ImageButton ibtnElimina = new ImageButton();
        
    ibtnElimina.ID Prodotto.GetAttribute("Codice") + ":" Prodotto.GetAttribute("CodiceVariante");
        
    ibtnElimina.Click += new ImageClickEventHandler(ibtnElimina_Click);
        
    ibtnElimina.ImageUrl "../Immagini/trash_closed.jpg";
        
    tdElimina.Controls.Add(ibtnElimina);
        
    TextBox txtQuantita = new TextBox();
        
    txtQuantita.AutoPostBack true;
        
    txtQuantita.TextChanged += new EventHandler(txtQuantita_TextChanged);
        
    txtQuantita.ID "qty:" Prodotto.GetAttribute("Codice") + ":" Prodotto.GetAttribute("CodiceVariante");
        
    txtQuantita.Text Prodotto.GetAttribute("Quantita");
        
    tdElimina.Controls.Add(txtQuantita);
        
    tr.Cells.Add(tdElimina);

    Ho anche provato a portare il metodo VisualizzaTabella fuori dalla if (!Page.IsPostback). In questo modo la tabella viene ricaricata con i vecchi dati e l'evento TextChanged del text box non viene scatenato.
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: La soluzione è sempre quella: ad ogni postback bisogna generare sempre quello che si è generato a mano

    quello di sotto è un piccolo esempio che funziona perfettamente
    codice:
    Option Strict On
    
    Partial Class prova_a
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            VisualizzaTabella()
        End Sub
    
        Protected Sub VisualizzaTabella()
            Dim table As New Table()
            Dim tr As New TableRow()
            Dim c As New TableCell()
            Dim tb As New TextBox()
            tb.ID = "TextBox1"
            tb.AutoPostBack = True
            AddHandler tb.TextChanged, AddressOf TextBox1_TextChanged
    
            c.Controls.Add(tb)
            tr.Cells.Add(c)
            table.Rows.Add(tr)
    
    
            Me.PlaceHolder1.Controls.Add(table)
        End Sub
    
    
        Protected Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim tb As TextBox = DirectCast(sender, TextBox)
            PrintLn(tb.Text)
        End Sub
    
    End Class
    Pietro

  5. #5
    Ho provato anche seguendo il tuo esempio con il PlaceHolder, il postback viene generato i controlli vengono ricreati ma non viene gestito l'evento TextChanged.
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da voyager18
    Ho provato anche seguendo il tuo esempio con il PlaceHolder, il postback viene generato i controlli vengono ricreati ma non viene gestito l'evento TextChanged.
    eppure il mio esempietto mi funziona bene (anche se fatto in basic, non ci dovrebbero essere differenze col c#)
    Hai visto che nel load metto sempre VisualizzaTabella?
    Pietro

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    va perfettamente

    codice:
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        protected void Page_Load(object sender, EventArgs e)
        {
            VisualizzaTabella();
        }
    
        protected void VisualizzaTabella()
        {
            Table table = new Table();
            TableRow tr = new TableRow();
            TableCell c = new TableCell();
            TextBox tb = new TextBox();
            tb.ID = "TextBox1";
            tb.Text = "xyz";
            tb.AutoPostBack = true;
            tb.TextChanged += TextBox1_TextChanged;
    
            c.Controls.Add(tb);
            tr.Cells.Add(c);
            table.Rows.Add(tr);
    
    
            this.PlaceHolder1.Controls.Add(table);
        }
    
    
        protected void TextBox1_TextChanged(object sender, System.EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            this.Response.Write(tb.Text);
        }    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
            
    
    
            <asp:LinkButton ID="LinkButton1" runat="server">Refresh</asp:LinkButton>
        </div>
        </form>
    </body>
    </html>
    Pietro

  8. #8
    Ho risolto! Il problema era che nell'ID del textbox avevo messo i duepunti ":". Tolti quelli ora funziona!! Grazie dell'aiuto!
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da voyager18
    Ho risolto! Il problema era che nell'ID del textbox avevo messo i duepunti ":". Tolti quelli ora funziona!! Grazie dell'aiuto!
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.