FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
Le databinding est une fonctionnalité qui permet d'associer une source de données à un contrôle web.
Le fait de "binder" (lier) ces données permettra au contrôle de les afficher automatiquement en évitant de devoir parcourir toutes les données et les renseigner une à une.
Le databinding se veut déclaratif plus que fait par programmation.
Certains contrôles web supportent le binding à une valeur (comme le TextBox), d'autres à plusieurs valeurs (comme une DropDownList).
Le binding se fait dans un seul sens, en appelant la méthode DataBind().
On utilise le scriptlet d'expressions liées (#), par exemple :
<div>
<%#Prenom %>
</div>
Avec par exemple une propriété de la page :
public
string
Prenom
{
get
{
return
"Nico"
;
}
}
Notez qu'il ne faudra pas oublier d'appeler la méthode DataBind() de la page afin d'indiquer au framework ASP.NET d'effectuer le remplacement des expressions :
protected
override
void
OnLoad
(
EventArgs e)
{
Page.
DataBind
(
);
base
.
OnLoad
(
e);
}
On peut également l'utiliser dans les attributs d'un contrôle, par exemple :
Cette fois-ci, on pourra simplement se contenter d'appeler la méthode DataBind du contrôle concerné :
protected
override
void
OnLoad
(
EventArgs e)
{
leLabel.
DataBind
(
);
base
.
OnLoad
(
e);
}
Un Datasource est comme son nom l'indique : une source de données.
Il peut y en avoir de plusieurs types, on citera par exemple SqlDataSource, ObjectDataSource, XmlDataSource, etc ...
Pour procéder au binding de ces sources de données, on pourra par exemple procéder ainsi (exemple avec un XmlDataSource et un ObjectDataSource) :
<asp:
xmldatasource id
=
"xmlDataSource1"
runat
=
"server"
datafile
=
"binding.xml"
/>
<asp:
ObjectDataSource runat
=
"server"
ID
=
"objectDataSource1"
TypeName
=
"WebApplication1.TestObject"
SelectMethod
=
"GetValue"
/>
<asp:
DropDownList ID
=
"DropDownList1"
runat
=
"server"
DataSourceID
=
"xmlDataSource1"
DataTextField
=
"titre"
/>
<asp:
DropDownList ID
=
"DropDownList2"
runat
=
"server"
DataSourceID
=
"objectDataSource1"
/>
Notons que le contrôle xmlDataSource1 pointe sur un fichier xml, comme source de données :
<?xml version="1.0" encoding="utf-8" ?>
<bindings>
<binding
titre
=
"databind d'une valeur"
/>
<binding
titre
=
"databind de plusieurs valeurs avec un Datasource"
/>
<binding
titre
=
"databind de plusieurs valeurs"
/>
</bindings>
et que le contrôle objectDataSource1 utilise la méthode GetValue du type TestObject pour alimenter la source de données :
namespace
WebApplication1
{
public
class
TestObject
{
public
int
[]
GetValue
(
)
{
return
new
[]
{
1
,
2
,
3
,
4
};
}
}
}
Dans ces exemples, on va utiliser une DropDownList et la connecter à la source de données grâce à l'attribut DataSourceID du contrôle.
Notez qu'on précise l'attribut xml dans le cas du binding à la source xml grâce à DataTextField.
N'oubliez pas d'appeler les méthodes DataBind correspondantes ou celle de la Page.
Une autre façon de binder des valeurs à un contrôle, sans utiliser de contrôle de source de données, est de renseigner la propriété DataSource du contrôle avec un type implémentant IEnumerable ou sa version typée.
Cela peut se faire déclarativement ainsi :
<
asp:
DropDownList ID=
"DropDownList1"
runat=
"server"
DataSource=
"<%#new[] { 1, 2, 3, 4} %>"
/>
Ou depuis le code-behind :
DropDownList1.
DataSource =
new
[]
{
1
,
2
,
3
,
4
};
Comme à chaque fois, n'oubliez pas d'appeler la méthode DataBind correspondante ou celle de la Page.