2010-08-24 138 views
1

我正在使用PivotGrid(DevExpress)。我想在for循环中设置AppearancePrint属性设置。动态设置属性值

在下面的例子中,我如何在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

谢谢。它做到了。 – 2010-08-24 20:01:59

0

我不熟悉您的具体问题,但一眼,似乎你需要使用反射因为直到运行时才会知道该类型 - 如果您不熟悉反射,它将允许您检查对象(更重要的是它的属性)

请参阅here可能的解决方案

+0

感谢您的链接。我打算试试这个 Type type = target.GetType(); PropertyInfo prop = type.GetProperty(“propertyName”); prop.SetValue(target,propertyValue,null); prop.SetValue(target,propertyValue,null); 同时,我找到了另一种方法来做到这一点,而不使用反射 DevExpress.Utils.AppearanceObject ao = grid.AppearancePrint.GetAppearance(type); ao.Options.UseFont = true; ao.BackColor = Color.FromName(dr [“BackColor”]。ToString()); Registers HS – 2010-08-24 20:06:03