2010-07-05 184 views
3

在我的問題上,我想通過反射來檢索一些值。 現在我想要設置值的對象感謝反射。是否可以從PropertyInfo獲取「對象」?

我想這樣寫:

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包含一個類型ColumnsCollection的。我只是想將我的PropertyInfo「映射」到一個對象以定義一些屬性後:例如:

cols[prop.Nom].Hidden = false; 

是否有可能?

最好的問候,

弗洛裏安

編輯:我試過GenericTypeTea解決方案,但我有一些問題。在這裏我的代碼片段:

 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>(); 

但TargetException拋出

+0

你能告訴我們你得到'Info'的代碼嗎? – GenericTypeTea 2010-07-05 14:38:38

回答

2

所以,你已經有了一個PropertyInfo對象,它是ColumnsCollection型的?

你可以得到它,使用下面的代碼進行修改:

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

基本上,你只需要通過你的原始對象放回PropertyInfo的GetValue方法將返回你的對象。只要將其作爲ColumnsCollection進行投射,就應該進行排序。

UPDATE:

根據您的更新,你應該這樣做:

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

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

你必須讓你的InfoPropertyInfo從不同類型的對象。儘管我認爲我們正在解決錯誤的問題。我不明白你想達到什麼目的。爲什麼不直接修改grille.DisplayLayout.Bands[0].Columns

+0

好吧,我正在嘗試...... – Florian 2010-07-05 13:38:17

+0

@florian - 任何喜悅? – GenericTypeTea 2010-07-05 13:51:22

+0

我正在編輯答案 – Florian 2010-07-05 14:28:08

相關問題