动态设置属性值

时间:2010-08-24 00:21:01

标签: c# properties

我使用的是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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我不熟悉您的确切问题,但一眼就看出,您似乎需要使用反射,因为在运行之前您不会知道类型 - 如果您不熟悉反射,它将允许你要检查对象(更重要的是它上面的属性)

请参阅here了解可能的解决方案