ASP.net : Data binding en List controls

  1. Inleiding
  2. Data binding syntax
  3. Single-value data binding
  4. Repeated-value data binding: basisprincipes
  5. Eenvoudige Repeated-value data binding: DropDownList, ListBox
  6. Repeater - Container.DataItem - Eval
  7. Attributen voor ODS

Inleiding

De meeste dynamische websites en zowat alle web-gebaseerde applicaties vereisen wellicht toegang tot een gegevensbron (data source). In de cursus C sharp maakten we al kennis met ArrayList en HashTableIn de cursus ADO.Net leerden we DataSet, DataTable, DataView, SqlDataReader kennen.
Deze kennis zullen we hier opnieuw nodig hebben. We zullen hier ook kennis maken met een aantal nieuwe ASP.Net server controls zoals de Repeater, GridView en DataList controls.

Data Binding Syntax

Het principe van server-side databinding is om ASP.NET zo ver te krijgen dat het een of meer waarden van een datasource in een control op een webpagina opneemt. De basissyntax hiervoor lijkt op een server-side scriptblok, met een '#' - karakter als indicator dat het hier om een databinding opdracht gaat.
<%# naam van databron %>
Een dergelijk codeblok bevat geen uitvoerbare opdrachten maar specifiekek databinding opdrachten.
Er zijn twee scenario's waarin we een control wensen te binden aan een databron :

Single Value data binding

Voeg een nieuwe Web Form toe: SingleValue.aspx

in SingleValue.aspx.cs

protected string titel = "Data binding";

protected string Figuur
{
   get { return "eekhoorn.jpg"; }
}

public int TelOp (int a, int b)
{
   return a + b;
}

private void Page_Load(object sender, System.EventArgs e)
{
	if(!IsPostBack)
    	DataBind();
}

in SingleValue.aspx
<form id="Form1" method="post" runat="server">
	<h1><%# titel %></h1>
	<asp:Image id="Image1" runat="server" ImageUrl='<%# "images/" +Figuur %>'>
	</asp:Image>
	<br/><asp:Label id="Label1" runat="server"><%# "bron van de figuur: " +Image1.ImageUrl %></asp:Label>
	<h2><%# "Optellen van 4 en 8 levert: " +TelOp(4,8) %></h2>
</form>

Hier gebruiken we single-value databinding op een aantal verschillende manieren.

Om de binding te activeren staat in de Page_Load methode de opdracht DataBind. Met deze methode van de Page-klasse zorg je ervoor dat alle controls gebonden worden. Het is de enige methode om er voor te zorgen dat we databinding verkrijgen zoals hierboven : databinding waarbij de binding niet in een control gebeurt. Gebruik je Controls die databinding ondersteunen, dan kan je de DataBind methode van de control gebruiken.

Repeated-Value data-binding: basisprincipes

Data-binding wordt pas heel interessant wanneer je gebruik maakt van een bron die meerdere waarden bevat. Elementen die als DataSource kunnen dienen zijn:

In ASP.net zijn er Controls die kunnen gebonden worden aan een datasource die meerdere items bevat:

De HTML-output die deze controls genereren hangt sterk af van eigenschappen die je instelt in de controls.

DropDownList, ListBox, RadioButtonList en CheckBoxList kan je zonder enige moeite aan een Datasource koppelen met de methode DataBind.

Repeater, DataList en DataGrid koppel je aan een DataSource door gebruik te maken van templates: je kan voor elke waarde in de datasource opgeven welke inhoud op de pagina moet verschijnen en welke opmaak er moet worden toegepast.

Eenvoudige repeated-value data-binding: DropDownList, ListBox

Je kan dit ook regelen met Visual Studio 2005, zonder code te moeten schrijven:

Je kan analoog werken voor een CheckBoxList en een RadioButtonList.

Merk op dat bij het werken met een ArrayList als bron, in de gegenereerde HTML-code voor de elementen het attribuut value dezelfde waarde krijgt als de eigenlijke tekst in de OPTION-tag.

Repeater - Container.DataItem - Eval

De control Repeater geeft je een volledige vrijheid in de manier waarop de items uit de DataSource op het scherm worden gepresenteerd.
Wanneer je een Repeater op een pagina sleept krijg je in Visual Studio de melding om in HTML-view de Templates aan te passen.
De Repeater control ondersteund een aantal templates. Hiemee kan je opgeven hoe de datagegevens op het scherm worden weergegeven:

Template Omschrijving
ItemTemplate Inhoud hiervan wordt herhaald voor elk item uit de DataSource. Deze template is vereist voor elke Repeater.
HeaderTemplate Wordt weergegeven boven de items uit de DataSource
FooterTemplate Wordt weergegeven onder de items uit de DataSource
AlternatingItemTemplate Inhoud en opmaak voor afwisselende items
SeparatorTemplate Wordt weergegeven tussen de verschillende items

Attributen voor Object Data Sources

Voor het handige gebruik van Object Data Sources kan je gebruik maken van attributen voor je dataaccess-methoden in de Logic-layer.
Op deze manier kan je gebruik maken van de optie "Show only data components" bij het instellen van de Object Data Source.
Je kan ook aangeven welke methoden je gaat gebruiken voor SELECT, UPDATE, INSERT en DELETE-opdrachten.

Business.cs
...
namespace Logic
{
    [DataObject]
    public class Business
    {
        [DataObjectMethod(DataObjectMethodType.Select)]
        public static ArrayList GetGroenten()
        {
            return DataAccess.GetGroenten();
        }

        [DataObjectMethod(DataObjectMethodType.Select)]
        public static Hashtable GetLanden()
        {
            return DataAccess.GetLanden();
        }
    }

    
}

Fietsroute.cs
...
    [DataObject]
    public class Fietsroutes
    {
        [DataObjectMethod(DataObjectMethodType.Select)]
        public static Fietsroutecollection GetFietsRoutes()
        {
            DataTable dt = DataAccess.GetFietsRoutes();
            int aantal = dt.Rows.Count;

            Fietsroutecollection fietsroutes = new Fietsroutecollection();
            foreach (DataRow rij in dt.Rows)
            {
                Fietsroute f = new Fietsroute();
                f.Id = Convert.ToInt32(rij["id"]);
                f.Naam = rij["naam"].ToString();
                f.Afstand = Convert.ToDouble(rij["afstand"]);
                fietsroutes.Add(f);
            }
            return fietsroutes;
        }
    }

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb