2010-08-24 4 views
1

Я использую PivotGrid (DevExpress). Я хочу установить параметры свойства AppearancePrint в цикле for.Динамическая установка значений свойств

Как использовать тип переменной для таких свойств, как Cell, в приведенном ниже примере?

поэтому вместо

grid.AppearancePrint.Cell.BackColor = Color.White; 
grid.AppearancePrint.Cell.BackColor2 = Color.LightBlue; 

Я хочу, чтобы это сделать:

//datarow example <PrintAppearance Type="Cell" Font="Tahoma,8,Regular" BackColor="White" BackColor2="Light Grey"/> 

foreach (DataRow dr in appearances)   
{ 
    string type = dr["Type"].ToString(); 
    grid.AppearancePrint.[type].BackColor = Color.FromName(dr["BackColor"].ToString()); 
    grid.AppearancePrint.[type].BackColor2 = Color.FromName(dr["BackColor2"].ToString()); 
} 

ответ

2

Это, по существу, форма синтаксического анализа скриптов, и для этого вам нужно использовать отражение. Например:

foreach (DataRow dr in appearances) { 
    string type = dr["Type"].ToString(); 

    PropertyInfo propertyForType = grid.AppearancePrint.GetType().GetProperty(type); 
    object objectForProperty = propertyForType.GetValue(grid.AppearancePrint, null); 

    PropertyInfo propertyForBackColor = objectForProperty.GetType().GetProperty("BackColor"); 
    PropertyInfo propertyForBackColor2 = objectForProperty.GetType().GetProperty("BackColor2"); 

    propertyForBackColor.SetValue(objectForProperty, Color.FromName(dr["BackColor"].ToString()), null); 
    propertyForBackColor2.SetValue(objectForProperty, Color.FromName(dr["BackColor2"].ToString()), null); 
} 
+0

Спасибо. кто это сделал. –

0

Я не знаком с вашей конкретной проблемы, но на первый взгляд, кажется, что вы должны будете использовать отражение поскольку вы не будете знать тип до времени выполнения. Если вы не знакомы с отражением, это позволит вам изучить объект (и, что более важно, свойства на нем)

См. here для возможного решения

+0

Спасибо за ссылку. Я собираюсь попробовать это Тип type = target.GetType(); PropertyInfo prop = type.GetProperty ("propertyName"); prop.SetValue (target, propertyValue, null); Между тем, я нашел другой способ сделать это без использования отражения DevExpress.Utils.AppearanceObject ao = grid.AppearancePrint.GetAppearance (type); ao.Options.UseFont = true; ao.BackColor = Color.FromName (dr ["BackColor"]. ToString()); С уважением HS –

Смежные вопросы