Vorrei chiedere un chiarimento sui postback asincroni (anche un link su cui possa trovare tale chiarimento). In una pagina ho due UpdatePanel: uno contiene un bottone e un'etichetta, l'altro un GridView. Il gridview ha l'EnableViewState a False.
Il binding della griglia avviene al primo Load della pagina e non nei postback successivi. A logica, avrei pensato che un postback asincrono del pannello il bottone non provocasse la perdita della sorgente dati della griglia, invece ciò avviene. Inoltre mi sono accorta che più righe ci sono nella griglia più il postback è lento; ma la griglia non dovrebbe venir toccata, giusto? Dove sta l'errore nel mio ragionamento? Ecco qualche riga di codice per spiegarmi meglio.
codice:
<asp:ScriptManager ID="smrProva" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="uplBottone" runat="server">
<ContentTemplate>
<asp:Button ID="btnProva" runat="server" Text="Conta righe" />
<asp:Label ID="lblProva" runat="server" Text="Prima dell'esecuzione"></asp:Label> </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="uplGriglia" runat="server">
<ContentTemplate>
<asp:GridView ID="dgvProva" runat="server" EnableViewState="false">
<Columns>
<asp:BoundField DataField="clmNome" />
<asp:BoundField DataField="clmCognome" />
<asp:BoundField DataField="clmCitta" /> </Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
codice:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dt As DataTable
If Not IsPostBack Then
dt = New DataTable
dt.Columns.Add("clmNome")
dt.Columns.Add("clmCognome")
dt.Columns.Add("clmCitta")
dt.Rows.Add("Mario", "Rossi", "Milano")
dt.Rows.Add("Giovanni", "Bianchi", "Roma")
dt.Rows.Add("Giuseppe", "Verdi", "Firenze")
Me.dgvProva.DataSource = dt
Me.dgvProva.DataBind()
End If
End Sub
Protected Sub btnProva_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnProva.Click
Me.lblProva.Text = "Ora la griglia ha " & Me.dgvProva.Rows.Count & " righe"
End Sub