Générer un tableau HTML à partir d'une liste de classes génériques avec des propriétés spécifiées
Je veux générer un tableau HTML à partir d'un couple de paramètres spécifiés. Plus précisément, les deux paramètres que je veux passer dans ma méthode sont: IEnumerable liste, et certains sous-ensemble de propriétés de T. Par exemple, disons que j'ai une Liste de cette classe:
class Person
{
string FirstName
string MiddleName
string LastName
}
Disons que la liste a 5 personnes. Je veux être en mesure d'obtenir un tableau HTML de cette classe (ou de tout autre arbitraire de la classe) en faisant quelque chose comme ceci:
List<Person> people;
...add people to list
string HTML = GetMyTable(people, "FirstName", "LastName");
Je suis sûr qu'il ya une meilleure façon de spécifier les propriétés de la table générée à partir de la (ou des propriétés qui je veux exclues de la table, que ce serait mieux car je vais habituellement la plupart ou la totalité des propriétés de la classe), mais je ne suis pas sûr de savoir comment (je n'ai jamais utilisé de réflexion, mais je suppose que c'est comment). Aussi, la méthode doit accepter une liste de n'importe quel type de classe.
Toutes les idées intelligentes sur la façon de l'accomplir?
source d'informationauteur birdus
Vous devez vous connecter pour publier un commentaire.
Peut-être quelque chose comme ça?
--Version 2.0 -
PS: Appel
fxn.Compile()
à plusieurs reprises peut être la performance de tueur dans une boucle serrée. Il peut être préférable de mettre en cache dans un dictionnaire .C'est ce que j'ai fait et il semble bien fonctionner et pas un énorme gain de performance.
Pour l'utiliser il suffit de passer le ToHtmlTable() une Liste
Exemple:
Liste des documents = GetMyListOfDocuments();
var tableau = documents.ToHtmlTable();
Voici deux approches, l'une utilisant la réflexion:
Ou à l'aide de lambda:
Avec les lambdas, ce qui se passe est que vous êtes les méthodes de transmission de la
GetMyTable
méthode pour obtenir à chaque propriété. Cela a des avantages sur la réflexion comme taper fort, et probablement de la performance.