[Résolu en moins de 20 minutes][Asp.Net/C#] DataBind d'exception

Hello,

Bon, je ne sais pas trop si c’est moi qui ai fait trop de winform ces derniers temps et qui a complétement perdu les pédales du côté d’ASP.NET, mais j’ai un truc un peu bizarre là. J’ai une classe qu’on va appeler BasicTutu

public class BasicTutu { public string Nom; public string ID; }

J’ai par ailleurs, une classe TutuRose, qui hérite BasicTutu :

[code]public class TutuRose : BasicTutu
{

}[/code]

Enfin, j’ai une classe ListeDeTutuRoses :

[code]public class ListeDeTutuRoses : List
{
public static ListeDeTutuRoses FaitPeterLaListeDesTutus()
{
// La je fait un tas de truc, mais en gros, ca se résume à
ListeDeTutuRoses tmpListe = new ListeDeTutuRoses();

	  foreach(TutuRose tutu in uneAutreListeDeTutusRoses)
	  {
			  tmpList.Add(tutu);
	  }

	  return tmpList;
 }

}[/code]

Jusque là, tout va bien, j’ai mes tutus.

Dans une page du site, j’ai une DropDownList, que j’initialise de la sorte :

Magic, le databind se fait tout seul comme prévu, et ma dropdownlist est remplie de ligne “MonNameSpace.TutuRose”. Bien entendu, ca ne m’interesse pas plus que ca. Je dégaine donc les deux strings magiques :

ddlTutus.DataSource = ListeDeTutuRoses.FaitPeterLaListeDesTutus(); ddlTutus.DataTextField = "Nom"; ddlTutus.DataValueField = "ID";

Et là, paf magie, Exception dans ma geule, comme quoi TutuRose ne contient pas de propriété Nom (ni ID d’ailleurs) :

[code]DataBinding: ‘MonNameSpace.TutuRose’ does not contain a property with the name ‘Nom’.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: DataBinding: ‘MonNameSpace.TutuRose’ does not contain a property with the name ‘Nom’.[/code]

Ce qui est ridicule, puisqu’on sait qu’il y en a une. Par ailleurs, il semble bien voir le type de l’objet au moment du DataBind. Donc j’ai l’impression de rater un truc simple, ou d’avoir une fait connerie de n00b, mais je vois pas à quel moment là.

Note : Evidemment, tous les noms des classes utilisées ici est purement fictif et ne servent qu’à centrer l’attention sur le problème. De même elles ne se limitent pas à ce qui est décrit ici, mais j’ai juste restreint les morceaux de code aux bouts qui concerne le susdit problème B)

Merci d’avance pour vos suggestions !

mm si je lis exactement ton code, non tutuRose n’a pas de propriétés. Par contre il a deux attributs publics, Nom et ID. Mais le mécanisme de réflexion planqué derrière le databind ne cherche QUE dans les propriétés, pas dans les attributs même plublics.

Ensuite si ton code réel est différent, bah je ne sais pas B)

J’aurais plutot mis :

ddlTutus.DataSource = ListeDeTutuRoses.FaitPeterLaListeDesTutus(); ddlTutus.DataTextField = Nom; ddlTutus.DataValueField = ID;

M’enfin, me rapelle plus trop. Je définis généralement dans l’aspx.

[quote=“MetalDestroyer, post:3, topic: 45972”]J’aurais plutot mis :

ddlTutus.DataSource = ListeDeTutuRoses.FaitPeterLaListeDesTutus(); ddlTutus.DataTextField = Nom; ddlTutus.DataValueField = ID;

M’enfin, me rapelle plus trop. Je définis généralement dans l’aspx.[/quote]

L’odre importe peu du moment que c’est fait avant l’appel à DataBind()

heritage public, sinon tu peux pas ecrire ou lire les valeurs…

[edit] enfin si je me souviens bien, hein…

[quote=“djktk, post:5, topic: 45972”]heritage public, sinon tu peux pas ecrire ou lire les valeurs…

[edit] enfin si je me souviens bien, hein…[/quote]

euh… non.

EDIT: oui je m’ennuie au boulot donc je squatte le fofo B)
REDIT: Oui djkktk j’ai pas précisé mais c’est en C++ qu’on peut écrire ça.

c’est en c++ alors ? oups, maggle.

[edit] comme dit le post qui me suit au debut j’avais pense aux accesseurs mais vu qu’il met les attributs publics je suis pas alle plus loin… mais comme je l’ai ecrit au dessus, la prog c’est loin, et le c++ a corrompu mon esprit…

(en gros je plussoie les accesseurs)

Si mes souvenirs sont bons, pour un databinding, il faut des accesseurs, sinon, camarchepas.

Et ben purée, si j’avais su… C’était exactement ça en fait. Bonne réponse collégiale de BodySplash et Ana-l. Merci à tout le monde B)

Ce que je voulais dire, c’est de virer les doubles quote quand tu fais appel à DataTextField et DataValueField. Tu donne directement la variable.

Au lieu de :
ddl_toto.DataTextField = “Nom”;

tu fais :
ddl_toto.DataTextField = Nom; (ou TutuRose.Nom)

[quote=“MetalDestroyer, post:10, topic: 45972”]Ce que je voulais dire, c’est de virer les doubles quote quand tu fais appel à DataTextField et DataValueField. Tu donne directement la variable.

Au lieu de :
ddl_toto.DataTextField = “Nom”;

tu fais :
ddl_toto.DataTextField = Nom; (ou TutuRose.Nom)[/quote]

Ah non ça marche pas du tout ça. DataTextField attend vraiment le nom de propriété (donc une string) dont il doit récupérer la valeur par réflexion. (et pareil pour DataValueField)

En voyant le titre, “résolu en moins de 20mn”, j’ai d’abord pensé à un pb de laptite ou maoh B)