ASP.NET ed ADO.NET
In questo articolo mostriamo come aggiungere le funzionalita' di ADO.NET
in una pagina ASP.NET. Non entreremo di nuovo nei dettagli della
programmazione di ADO.NET, di cui abbiamo gia' parlato nella sezione
che gli compete. L'esempio che illustriamo e' stato gia' trattato nella sezione
Controlli, articolo Databinding. Vi consiglio di rileggerlo.
Lo scopo della pagina e' quello di visualizzare, in una lista lstLettere,
l'elenco delle email, memorizzate nel database "Posta.mdb". Tre caselle di
testo visualizzeranno il resto delle informazione relative alla email
selezionata nella lista.
Tabella "Posta" |
indice |
mittente |
oggetto |
data |
testo |
1 |
dante@alighieri.it |
Commedia |
01 / 01 / 2001 |
Nel mezzo del cammin.... |
2 |
babbo@natale.com |
Auguri |
01 / 01 / 2001 |
Buon natale |
3 |
guido@lamacchina.org |
Viabilita' |
01 / 01 / 2001 |
Via libera |
Inseriamo nel Form aspx i quattro controlli che visualizzeranno i dati:
lstLettere, txtOggetto, txtData, txtMessaggio:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb"
Inherits="VBN_Tut_AspxAdo.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/
intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:ListBox id="lstLettere" style="Z-INDEX: 101; LEFT: 16px;
POSITION: absolute; TOP: 32px" runat="server" Width="152px">
</asp:ListBox>
<asp:TextBox id="txtMessaggio" style="Z-INDEX: 104; LEFT: 176px;
POSITION: absolute; TOP: 64px" runat="server" Width="312px"
Height="104px"></asp:TextBox>
<asp:TextBox id="txtData" style="Z-INDEX: 103; LEFT: 336px;
POSITION: absolute; TOP: 32px" runat="server"></asp:TextBox>
<asp:TextBox id="txtOggetto" style="Z-INDEX: 102; LEFT: 176px;
POSITION: absolute; TOP: 32px" runat="server"></asp:TextBox>
</form>
</body>
</HTML>
Il Databinding realizzato per un form aspx, non e' molto
flessibile, ci sono molti passi che non sono automatizzati e che
richiedono comunque scrittura di codice. E' possibile automatizzare
la visualizzazione dei dati in un controllo, ma e' piu' complicato
aggiornare il dato in conseguenza di un PostBack.
Abbiamo deciso di utilizzare un DataSet e caricarlo con i dati relativi
alla tabella di interesse, usare il Databinding per collegare
la lista alla colonna dei mittenti e impostare via codice i valori
delle TextBox.
Il Databinding complesso, come quello della ListBox che utilizziamo, e'
piuttosto semplice da realizzare. Associamo il DataSet, popolato dalla
procedura LoadData, alla lista, tramite la proprieta'
DataSource e poi indichiamo la colonna da visualizzare con la
proprieta' DataTextField. Il binding viene poi effettuato
chiamando il metodo DataBind sulla pagina (Me).
Notate la proprieta' AutoPostBack. I controlli che ne dispongono
possono effettuare il submit del Form, proprio come farebbe un
pulsante. Nel caso di una ListBox, il PostBack viene eseguito al cambio
della selezione degli elementi della lista.
In questo modo, ogni volta che selezioniamo un nuovo elemento, il form
viene ricaricato generando prima l'evento Load del Form
e poi il SelectedIndexChanged della Lista.
Nell'evento SelectedIndexChanged, dalla lista reperiamo l'indice
che corrispondera' anche alla posizione della riga della tabella da dove
prendere il resto delle informazioni. Ottenuta la riga, objRow,
assegnamo i valori dei campi alle TextBox relative, ed il gioco e' fatto.
Imports System.Data
Imports System.Data.OleDb
Public Class WebForm1
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Protected WithEvents lstLettere As System.Web.UI.WebControls.ListBox
Protected WithEvents txtMessaggio As System.Web.UI.WebControls.TextBox
Protected WithEvents txtData As System.Web.UI.WebControls.TextBox
Protected WithEvents txtOggetto As System.Web.UI.WebControls.TextBox
Dim DataSet_Posta As DataSet
Private Sub LoadData()
Dim objConn As OleDbConnection
Dim objAdapter As OleDbDataAdapter
objConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=C:\Inetpub\wwwroot\VBN_Tut_AspxAdo\posta.mdb;")
objAdapter = New OleDbDataAdapter("select * from posta", objConn)
DataSet_Posta = New DataSet()
objAdapter.Fill(DataSet_Posta, "posta")
objAdapter.Dispose()
objConn.Close()
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
LoadData()
If Not Me.IsPostBack Then
lstLettere.AutoPostBack = True
lstLettere.DataSource = DataSet_Posta.Tables("posta")
lstLettere.DataTextField = "mittente"
End If
Me.DataBind()
End Sub
Private Sub lstLettere_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles lstLettere.SelectedIndexChanged
Dim idx As Integer = lstLettere.SelectedIndex
If idx = -1 Then Return
Dim objRow As DataRow
objRow = DataSet_Posta.Tables("posta").Rows(idx)
txtOggetto.Text = objRow.Item(2)
txtData.Text = objRow.Item(3)
txtMessaggio.Text = objRow.Item(4)
End Sub
End Class
Ultimo aggiornamento 18/02/2004
|