N'ayant aucunes autres pistes j'ai exploité l'objet envoyé lors de l'évènement Selected du LinqDataSource et à l'aide de la réflexion, j'arrive à retourner sous forme de liste le mes colonnes, mais cette approche est très bancale. Je sens que je ne m'y prends pas de la bonne façon.
Il faudrait que je prévois un autre cas de traitement si le Select ne renvoi pas l'intégralité de ma classe "Environment". Effectivement dans le cas ou le retour n'est plus un objet de type Link.Environment mais un objet Dynamique, je récupère une erreur sur ce traitement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| protected void ldsEnvironment_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
LinqDataSourceStatusEventArgs ldssea = e as LinqDataSourceStatusEventArgs;
//L'élément LinqDataSourceStatusEventArgs possède une propriété Result qui contient une List de Link.Environment ou d'objet Dynamique
//selon le Select de la source de donnée. [Pas de select donne un objet Link.Environment] et [new (Code, Status) donne un objet Dynamique]
List<Link.Environment> ldsseaList = (List<Link.Environment>)ldssea.Result;
//Le traitement qui suit ne fonctionne que sur un objet Link.Environment
//On récupère le premier élément de la List
Type ldsseaObj = ldsseaList.First().GetType();
//Pour chacune des méthodes existantes, on fait le traitement suivant
foreach (MethodInfo mi in ldsseaObj.GetMethods())
{
//Ce traitement isole uniquement les propriétés représentant les colonnes.
//Exemple : pour le traitement de get_Code, l'entrée satisfait les conditions.
if (!mi.IsFinal && mi.IsSpecialName && mi.Name.StartsWith("get_"))
{
//On rend le nom de la colonne sous forme de string : "get_Code" est donc "Code", l'un des champs de ma table
lb.Text += mi.Name.Replace("get_", "") + "<br />";
columnInDataSource.Add(mi.Name.Replace("get_", ""));
}
}
} |
Le problème vient de la ligne suivante :
List<Link.Environment> ldsseaList = (List<Link.Environment>)ldssea.Result;
Je ne sais pas comment caster un object dynamique.
Je me pose également une question, comment fait t-on des jointures avec une LinqDataSource ?
Dernier problème, l'évènement Selected de linqDataSource se déclenche après le Page_Load dans lequel je lie mes colonnes. Pour les lier après cette évènement, ou est t-il le plus judicieux de faire la liaison (j'ai tester plusieurs évènement de la Page et du Gridview sans succès...
Note : Le code suivant ne sert pas a grand chose dans un Selected. J'aurais pu me servir de la nomenclature de mon objet Link.Environment pour faire la même chose en dehors du Selected. Ce qui m'intéresse est plutôt du coté dynamique.
A l'aide
Partager