2010-07-05 12 views
3

Dans mes questions précentes, je veux récupérer certaines valeurs par réflexion. Maintenant, je veux définir des valeurs aux objets grâce à la réflexion.Est-il possible d'obtenir un 'objet' à partir d'un PropertyInfo?

Je veux écrire ceci:

private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info) 
     { 
      UltraGrid grille = (UltraGrid)control; 
      SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>(); 

      if (grille != null) 
      { 
       // I want to write MapPropertyInfo method 
       ColumnsCollection cols = MapPropertyInfo(Info); 

PropertyInfo contient un type de ColumnsCollection. Je veux juste « carte » mes PropertyInfo à un objet de définir certaines propriétés après: Par exemple:

cols[prop.Nom].Hidden = false; 

Est-il possible?

Cordialement,

Florian

EDIT: J'ai essayé la solution GenericTypeTea, mais j'ai un problème. Voici mon extrait de code:

 private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info) 
    { 
     UltraGrid grille = (UltraGrid)control; 
     ColumnsCollection c = grille.DisplayLayout.Bands[0].Columns; 

        // Throw a not match System.Reflection.TargetException 
     ColumnsCollection test = Info.GetValue(c,null) as ColumnsCollection; 
     SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>(); 

Mais TargetException est Jeté

+0

Pouvez-vous nous montrer le code où vous obtenez 'Info'? – GenericTypeTea

Répondre

2

Vous avez déjà un objet PropertyInfo qui est de type ColumnsCollection?

Vous pouvez l'obtenir et de le modifier en utilisant le code suivant:

var original = GetYourObject(); 
PropertyInfo Info = GetYourPropertyInfo(original); 
ColumnsCollection collection = Info.GetValue(original) as ColumnsCollection; 

Fondamentalement, il vous suffit de passer votre objet initial de nouveau dans la méthode GetValue de PropertyInfo qui vous renvoie un objet. Il suffit de lancer que le ColumnsCollection et vous devriez être triés.

MISE À JOUR:

En fonction de votre mise à jour, vous devez faire ceci:

object original = grille.DisplayLayout.Bands[0]; 
PropertyInfo info = original.GetProperty("Columns"); 

ColumnsCollection test = info.GetValue(original, null) as ColumnsCollection; 

Vous devez être obtenir votre InfoPropertyInfo à partir d'un objet d'un type différent. Bien que je pense que nous réparons le mauvais problème ici. Je ne comprends pas ce que vous essayez d'accomplir. Pourquoi ne pas simplement modifier grille.DisplayLayout.Bands[0].Columns directement?

+0

Ok, je suis en train d'essayer ... – Florian

+0

@florian - Une joie? – GenericTypeTea

+0

Je suis en train d'éditer la réponse bientôt – Florian