Introduzione all'associazione dati ASP.NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 307860 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato precedentemente pubblicato con il codice di riferimento I307860
In questo articolo si fa riferimento ai seguenti spazi dei nomi della libreria di classi di Microsoft .NET Framework:
  • System.Data
  • System.Data.SqlClient
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene presentata una descrizione introduttiva dell'associazione dati in ASP.NET.

Per ulteriori informazioni a carattere preliminare su ASP.NET, vedere il seguente articolo della Knowledge Base:
305140 Guida di orientamento per ASP.NET

Informazioni

L'associazione dati di ASP.NET consente di associare qualsiasi controllo server a proprietÓ semplici, insiemi, espressioni e/o metodi. Tramite l'associazione dati si ottiene una maggiore flessibilitÓ con l'utilizzo dei dati di un database o di altri strumenti.

In questo articolo vengono affrontati i seguenti argomenti relativi all'associazione dati:

Nozioni fondamentali sull'associazione dati

Sintassi <%# %>

In ASP.NET Ŕ stata introdotta una nuova sintassi dichiarativa, <%# %>, che costituisce la base per l'utilizzo dell'associazione dati in una pagina aspx. Tutte le espressioni di associazione dati devono essere comprese all'interno di questi caratteri. Nell'elenco seguente sono presentati alcuni esempi di semplici associazioni dati provenienti da fonti diverse:
  • ProprietÓ semplice (sintassi per un cliente):
    <%# custID %>
    					
  • Insieme (sintassi per un ordine):
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    					
  • Espressione (sintassi per un contatto):
    <%# ( customer.First Name + " " + customer.LastName ) %>
    					
  • Risultato di un metodo (sintassi per il saldo corrente):
    <%# GetBalance(custID) %>
    					
In questi esempi i tag <%# %> inline indicano il punto in cui collocare nella pagina aspx le informazioni provenienti da un'origine dati specifica. Nell'esempio riportato di seguito viene utilizzato un controllo server Web TextBox:
<asp:textbox id=txt text="<%# custID %>" runat=server />
				
Per ulteriori informazioni sulla sintassi di associazione dati, fare riferimento alla seguente documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Sintassi delle espressioni di associazione dati
http://msdn.microsoft.com/it-it/library/bda9bbfx(vs.71).aspx

Differenze tra Page.DataBind() e Control.DataBind()

Dopo aver determinato le origini dati specifiche e dopo averle impostate per gli oggetti nella pagina aspx, Ŕ necessario associarvi i dati. A tale scopo Ŕ possibile utilizzare il metodo Page.DataBind o il metodo Control.DataBind.

I due metodi funzionano in modo analogo. La differenza principale consiste nel fatto che tutte le origini dati vengono associate ai controlli server dopo la chiamata al metodo Page.DataBind. Il rendering dei dati sul controllo viene eseguito solo dopo una chiamata esplicita al metodo DataBind del controllo server Web oppure dopo che Ŕ stato richiamato il metodo Page.DataBind a livello di pagina. Generalmente la chiamata a Page.DataBind (o a DataBind) viene eseguita dall'evento Page_Load.

Per ulteriori informazioni sul metodo DataBind, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese): Metodo Control.DataBind
http://msdn.microsoft.com/it-it/library/w5e5992d.aspx

Controlli elenco associati a dati

I controlli elenco sono speciali controlli server Web che possono essere associati a insiemi. ╚ possibile utilizzare questi controlli per visualizzare righe di dati in formato di modello personalizzato. Tutti i controlli elenco espongono le proprietÓ DataSource e DataMember, utilizzate per l'associazione agli insiemi.

╚ possibile associare la proprietÓ DataSource di questi controlli a qualsiasi insieme che supporti l'interfaccia IEnumerable, ICollection oppure IListSource.

Controllo Repeater

Il controllo Repeater Ŕ un elenco associato a dati basato su modelli. Questo controllo Ŕ "indefinito", vale a dire che non dispone di un layout incorporato nÚ di alcun tipo di stile. Il layout HTML, la formattazione e i tag di stile devono pertanto essere dichiarati esplicitamente nei modelli del controllo.

Negli esempi di codice riportati di seguito si dimostra come sia possibile utilizzare un singolo controllo elenco (il controllo Repeater) per visualizzare dati:

NOTA: Ŕ necessario modificare i parametri della stringa di connessione in base alle impostazioni dell'ambiente utilizzato.

Visual Basic .NET
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

   Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                                "database=pubs;Integrated Security=SSPI")
   Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
   Dim ds As DataSet = New DataSet()
   cmd.Fill(ds)
   Repeater1.DataSource = ds
   Repeater1.DataBind()

End Sub
</script>
<html>
<body>
   <form id="Form1" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual C# .NET
<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
   SqlConnection cnn = new 
       SqlConnection("server=(local);database=pubs;Integrated Security=SSPI"); 
   SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "authors"); 
   Repeater1.DataSource = ds.Tables["authors"];
   Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
    	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual J# .NET
<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

 <script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
    SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
         Security=SSPI"); 
    SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "authors"); 
    DataTableCollection dtc = ds.get_Tables();
    int index = dtc.IndexOf("authors");
    Repeater1.set_DataSource(dtc.get_Item(index));
    Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
             </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Per ulteriori informazioni sul controllo Repeater, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework:
Controllo server Web Repeater
http://msdn.microsoft.com/it-it/library/x8f2zez5.aspx

Controllo DataList

La classe DataList Ŕ un elenco associato a dati basato su modelli dalle numerose funzionalitÓ. ╚ possibile personalizzare questo controllo modificando i modelli. A differenza del controllo Repeater, DataList supporta il rendering direzionale e se lo si desidera Ŕ in grado di eseguire il rendering in una tabella HTML in fase di esecuzione.

Per ulteriori informazioni sul controllo DataList, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Controllo server Web DataList
http://msdn.microsoft.com/it-it/library/9cx2f3ks(VS.85).aspx

Controllo DataGrid

Il controllo DataGrid Ŕ una griglia associata a dati, costituita da pi¨ colonne e dotata di numerose funzionalitÓ. Per personalizzare il layout di singole colonne in DataGrid, Ŕ possibile impostare il tipo di colonna in modo che sia basato su modelli, quindi modificare i modelli della colonna. Il controllo DataGrid Ŕ in grado di eseguire il rendering senza ricorrere a modelli, costituendo l'ideale per la creazione di report, e supporta inoltre la selezione, la modifica, l'eliminazione, la suddivisione in pagine e l'ordinamento per colonna e pulsanti di colonna.

Per ulteriori informazioni sul controllo DataGrid, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Controllo server Web DataGrid
http://msdn.microsoft.com/it-it/library/aa710742(VS.71).aspx

Accesso ai dati

In questa sezione viene descritto come accedere ai dati di un database e associarli ai controlli elenco. Per ottenere dati da un database Ŕ possibile utilizzare la classe DataSet oppure la classe DataReader.

Classe DataSet

Una classe DataSet comprende una rappresentazione completa di dati, tra cui la struttura della tabella, le relazioni tra tabelle e l'ordinamento dei dati. Le classi di questo tipo presentano la flessibilitÓ necessaria per memorizzare qualsiasi tipo di informazione proveniente da un database in un file XML (Extensible Markup Language). Le classi DataSet sono prive di stato, ovvero possono essere trasferite da client a server senza impegnare risorse di connessione al server. Nel codice riportato di seguito viene illustrato come utilizzare una classe DataSet per associare dati a un controllo.

NOTA: Ŕ necessario modificare i parametri della stringa di connessione in base alle impostazioni dell'ambiente utilizzato.

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind() 
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind(); 
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();
				
Per ulteriori informazioni sulla classe DataSet, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Classe DataSet
http://msdn.microsoft.com/it-it/library/system.data.dataset(vs.71).aspx

Classe DataReader

Se invece si desidera solo visualizzare, senza modificare, i dati da utilizzare per il rendering, potrebbe essere consigliabile utilizzare la classe DataReader. Per un controllo DropDownList, ad esempio, Ŕ preferibile utilizzare una classe DataReader poichÚ DataReader Ŕ un cursore dati di tipo forward-only. Nel codice riportato di seguito viene illustrato come utilizzare una classe SqlDataReader per associare dati a un controllo:

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn); 

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();
				
Per ulteriori informazioni sulla classe SqlDataReader e sull'accesso ai dati con ASP.NET, vedere i seguenti argomenti della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Classe SqlDataReader
http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqldatareader.aspx

Sviluppo di applicazioni ASP.NET ad alte prestazioni
http://msdn.microsoft.com/it-it/library/5dws599a(vs.71).aspx

Associazioni nei modelli di controlli elenco

╚ possibile utilizzare i modelli dei controlli elenco per associare e personalizzare singoli record di un'origine dati. In questa sezione vengono descritti tre metodi che consentono di conseguire questo risultato.

Metodo DataBinder.Eval

Quando l'origine dati interagisce con i dati restituiti da un database, Ŕ possibile che contenga numerose informazioni. Per restituire i dati, Ŕ possibile utilizzare il metodo generico DataBinder.Eval. Nell'esempio di codice riportato di seguito il campo "au_id" viene restituito dall'origine dati dell'oggetto contenitore:
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
				
Per ulteriori informazioni sul metodo DataBinder.Eval, fare riferimento al seguente argomento della documentazione del Software Development Kit (SDK) relativa a .NET Framework (informazioni in lingua inglese):
Metodo DataBinder.Eval
http://msdn.microsoft.com/it-it/library/4hx47hfe.aspx

Casting esplicito

Se Ŕ necessario un maggiore controllo, utilizzare il casting esplicito. Nella conversione esplicita si utilizza una parola chiave di conversione tra tipi. Tali parole chiave fungono da funzioni ma il compilatore genera il codice inline. Ne consegue che l'esecuzione Ŕ leggermente pi¨ rapida rispetto alla chiamata a una funzione. Nell'esempio di codice riportato di seguito viene utilizzato il casting di tipo esplicito:

Visual Basic .NET
' DataTable as the DataSource
<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>
				
Visual C# .NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Visual J# .NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Negli esempi precedenti come origine dei dati Ŕ stata sempre utilizzata una classe DataTable, che Ŕ un sottoinsieme della classe DataSet, oppure una classe DataReader.

Evento ItemDataBound

Per eseguire l'associazione dati Ŕ anche possibile utilizzare l'evento ItemDataBound del controllo. Questo evento si verifica quando un elemento Ŕ associato al controllo. Nell'esempio di codice HTML riportato di seguito viene definito un controllo Repeater con un evento ItemTemplate:
<asp:repeater id=rptr runat=server>
   <itemtemplate>
      <asp:label id=lblAuthorID runat=server />
   </itemtemplate>
</asp:repeater>
				
Nella pagina sono necessari i seguenti metodi:

Visual Basic .NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
   'TODO: Retrieve data from a database,
   'and bind the data to a list control.

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
   Dim rec As DataRowView
   rec = e.Item.DataItem

   'Make sure that you have the data.
   If Not IsDBNull(rec) Then
      Dim l1 As Label
      l1 = e.Item.FindControl("lblAuthorID")
      l1.Text = rec("au_id").ToString()
   End If
End Sub
				
Visual C# .NET
public void Page_Init(object sender, System.EventArgs e)
{
   rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
   // TODO: Retrieve data from a database,
   // and bind the data to a list control.
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
   System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                          e.Item.DataItem;
   if(rec!=null) //Make sure that you have the data.
   {
      Label l1 = (Label)e.Item.FindControl("lblAuthorID");
      l1.Text = rec["au_id"].ToString();
   }
}
				
Visual J# .NET
public void Page_Init(Object sender, System.EventArgs e)
{
            rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
            // TODO: Retrieve data from a database,
            // and bind the data to a list control.
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
            System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                                   e.get_Item().get_DataItem();
            if (rec != null) //Make sure that you have the data.
            {
                        Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
                        l1.set_Text(((rec.get_Item("au_id")).ToString()));
            }
}
				
Nota: questo Ŕ un articolo a "PUBBLICAZIONE RAPIDA", creato direttamente all'interno dell'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento vengono fornite "cosý come sono" in risposta alle problematiche riscontrate. A causa della rapiditÓ con cui vengono resi disponibili, i materiali possono contenere errori di battitura e sono soggetti a modifica senza preavviso, in qualsiasi momento. Per altre considerazioni, vedere le Condizioni per l'utilizzo.

ProprietÓ

Identificativo articolo: 307860 - Ultima modifica: venerdý 23 agosto 2013 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Chiavi:á
kbarttyperoadmap kbdatabinding kbinfo kbservercontrols KB307860
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com