I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager

di Andrea Zani, in ASP.NET 3.5,

È innegabile che l'introduzione più importante riguardante ASP.NET 3.5 e il .NET Framework 3.5 sia LINQ. Per poter interagire al meglio con questa nuova modalità di accesso ai dati all'interno delle pagine web, i programmatori Microsoft hanno introdotto un controllo DataSource specifico, ovvero il LinqDataSource.

Un'ulteriore novità di notevole importanza è rappresentata anche dal web control ListView, che può essere considerato come la risposta definitiva per la visualizzazione dei dati, visto che può sostituire tranquillamente qualsiasi altro controllo data-bound esistente: Repeater, DataList, DataGrid e GridView. Dal momento che visualizzare dati implica spesso dover paginare una grande mole di record, ecco che con ListView arriva anche il controllo DataPager. Con questi due nuovi web control possiamo trovare pressoché tutte le risposte alle nostre necessità legate alla visualizzazione dei dati.

L'esempio

Questo articolo si pone come scopo quello di mostrare le potenzialità offerte dai nuovi controlli di ASP.NET 3.5 attraverso un esempio pratico disponibile anche in allegato. L'esempio consiste in una piccola applicazione web che mostra le principali tecniche per la visualizzazione dei dati sfruttando LinqDataSource, ListView, DataPager e altri controlli data-bound e DataSource.

Prima di iniziare a vedere più da vicino l'applicazione di esempio, occorre fare una premessa. Come già ampiamente spiegato nell'articolo riguardante LINQ, Visual Studio 2008 introduce una grossa facilitazione per i programmatori nello sviluppo di componenti per l'accesso ai dati tramite LINQ To SQL e in particolare tramite l'oggetto DataContext. Per maggiori informazioni è possibile fare riferimento all'articolo citato, ma è necessario ricordare che il DataContext non è nativo di ASP.NET, è semplicemente un insieme di classi create da un tool all'interno di Visual Studio 2008 (o da linea di comando) che facilitano l'accesso ai dati sfruttando LINQ.

L'esempio proposto utilizza LINQ To SQL, dal momento che esso si basa su un database in formato SQL Server Express contenente tra l'altro una sola tabella. Da questo database può essere creato un semplice DataContext contenente un'oggetto Table di nome "example", come mostrato nella figura seguente.

Figura 1

All'interno della tabella nel database sono presenti alcuni record casuali, a semplice scopo didattico.

Figura 2

In alcuni degli esempi mostrati nel corso dell'articolo vengono utilizzate collezioni tipizzate dichiarate e inserite direttamente da codice. Nell'allegato è possibile trovare questi oggetti nel file "MyCollection.cs" presente nella cartella "App_Code".

public class Person
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Surname { get; set; }
}

public class PersonCollection
{
  private static List<Person> persons = new List<Person>()
  {
    new Person { Id=1, Name="Andrea", Surname="Zani" },
    new Person { Id=2, Name="Daniele", Surname="Bochicchio" },
    new Person { Id=3, Name="Cristian", Surname="Civera" },
    new Person { Id=4, Name="Stefano", Surname="Mostarda"},
    new Person { Id=5, Name="Riccardo", Surname="Golia"},
    new Person { Id=6, Name="Marco", Surname="Leoncini"},
    new Person { Id=7, Name="Alessio", Surname="Leoncini"},
    new Person { Id=8, Name="Ugo", Surname="Lattanzi"},
    new Person { Id=9, Name="Marco", Surname="De Sanctis"},
    new Person { Id=10, Name="Matteo", Surname="Casati"}
  };

  // ...omissis...

}

LinqDataSource con diverse sorgenti dati

LinqDataSource è nato per lavorare essenzialmente per accedere ai dati con i DataContext e LINQ. Possiamo senza molto sforzo utilizzare questo web control anche per accedere e interrogare le classi delle nostre applicazioni. Nell'esempio visibile richiamando la pagina "Default.aspx" dell'applicazione allegata, possiamo vedere tre web control popolati da tre LinqDataSource diversi che accedono ai dati in tre modalità differenti (vedi figura).

Figura 3

Il primo DropDownList è creato con questo codice:

<asp:DropDownList ID="DropDownList1" runat="server"
  DataSourceID="LinqDataSource1"
  DataTextField="name" DataValueField="id">
</asp:DropDownList>

<asp:LinqDataSource ID="LinqDataSource1" runat="server"
  ContextTypeName="DataClassesDataContext"
  OrderBy="name" Select="new (id, name)"
  TableName="examples">
</asp:LinqDataSource>

Il web control è collegato al LinqDataSource e tramite il DataContext visto in precedenza ritorna l'elenco dei nominativi presenti nella tabella "example", utilizzando un anonymous type contenente le due proprietà "id" e "name".

La lista con i RadioButton viene creata con il codice seguente:

<asp:RadioButtonList ID="RadioButtonList1" runat="server"
  DataSourceID="LinqDataSource2" DataTextField="Name"
  DataValueField="Id">
</asp:RadioButtonList>

<asp:LinqDataSource ID="LinqDataSource2" runat="server"
  ContextTypeName="AZ.Entity.PersonCollection" OrderBy="Name"
  Select="new (Id, Name)" TableName="GetPersons">
</asp:LinqDataSource>

La sintassi non è molto differente da quella precedente. Vanno specificate la proprietà ContextTypeName (PersonCollection) e TableName (GetPersons). Andando a vedere il codice in "MyCollection.cs", troviamo che il campo pubblico GetPersons ritorna la lista tipizzata dei nominativi dello staff di ASPItalia.com grazie ad una expression query.

public IEnumerable<Person> GetPersons =
  from person in PersonCollection.persons
  select new Person
  {
    Id = person.Id,
    Name = person.Name,
    Surname = person.Surname
  };
4 pagine in totale: 1 2 3 4

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti