Templatecolumn dans un datagrid

Signaler
Messages postés
1
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
30 janvier 2003
-
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
j'ai créé une templatecolumn dans un datagrid
j'ai créé un itemtemplate pour remplir cette colonne

mais je n'arrive pas à affecter la valeur de cet itemtemplate par le codebehind
en fait je voudrais faire la meme chose que :
<%# databinder.eval(container.dataitem,"champ_de_ma_source") %>
mais dans le codebehind

la source de mon datagrid est un hashtable

2 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Je ne ssias pas ce que tu as déjà implémenté pour ton itemtemplate, mais voici en gros les étapes à suivre :

Ton itemtemplate doit implémenter ITemplate et donc définir la méthode InstantiateIn

void ITemplate.InstantiateIn(Control container)
{
container.Controls.Add(new itemTemplate());
}

Ensuite, pour lier les donner, il faut qu'il sache que faire lors du DataBind, Il faut donc mettre dans ton constructeur :
this.DataBinding += new EventHandler(this.BindData);

puis définir la méthode BindData :

private void BindData(object sender, EventArgs e)
{
DataGridItem container = (DataGridItem) this.NamingContainer;
container.ItemIndex;/*Permet de trouver l'index de la ligne dans laquelle se trouve cette cellule*/
((DataRowView) container.DataItem)["DataField"] /*Permet de récupérer ce qui se trouve dans la colonne 'DataField' Du DataGrid, même si elle n'est pas visible*/
{
}

J'espère que c'est ce que tu désirais, autrement il faudra me montrer ton code pour des explications plus ciblées

A+
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
En fait, je travaille en Delphi.Net et il n'y a pas beaucoup d'aide...

Je fais:
chk := CheckBox.Create;
chk.Text := 'Bonjour';
dgcOte := TemplateColumn.Create;
dgcOte.HeaderText := 'Oter';
dgcOte.ItemTemplate.InstantiateIn(chk); // Ca plante ici
dgDonnees.Columns.Add(dgcOte);
dgDonnees.DataBind;

Aurais-je oublié une étape ?
faut il réImplémenter la méthode InstantiateIn?

David, à VERSAILLES