簡體   English   中英

使用反射來設置控件的屬性

[英]Using reflection to set a property of a control

我正在使用反射為控件分配屬性,因為控件屬性存儲在數據庫中。而且我面臨以下情況的問題。

我有raddateinput控件,它具有屬性DateInput.DataFormat ,當我嘗試使用以下代碼獲取propertyinfo時,它返回為null。

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

ctrl是一個控件。 propertyNameDateInput.DataFormat

我用以下代碼實現了解決方案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM