使用反射设置控件的属性

时间:2013-12-04 17:47:24

标签: c# system.reflection

我正在使用反射为控件分配属性,因为控件属性存储在数据库中。我遇到以下情况的问题。

我有raddateinput控件,它有一个属性DateInput.DataFormat,当我尝试获取使用以下代码的propertyinfo时,它返回为null。

ctrl.GetType().GetProperty(propertyName.Split('.').FirstOrDefault(), BindingFlags.Public | BindingFlags.Instance)
    .GetType().GetProperty(propertyName.Split('.').LastOrDefault())

ctrl是一个控件。 propertyNameDateInput.DataFormat

1 个答案:

答案 0 :(得分:0)

我使用以下代码实现了解决方案。

    Private void SetProperty(Object ctrl, string propertyName, string value)
    {
        string name = propertyName.Split('.').First();
        PropertyInfo property = ctrl.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance);
        if (name != propertyName)
        {
            ctrl = property.GetValue(ctrl, null);
            SetProperty(ctrl, propertyName.Replace(string.Concat(name, "."), string.Empty), value);
            return;
        }
        TypeConverter converter = TypeDescriptor.GetConverter(property.PropertyType);
        if (converter != null && converter.CanConvertFrom(typeof(String)))
                property.SetValue(ctrl, converter.ConvertFrom(value), null);
    }