ASP.NET, C#, Как динамически определить свойства или метод пользовательского элемента управления и добавить к ним значение?

Вы хотите динамически добавлять свойства или методы пользовательского элемента управления из кода, например:

foreach (DataRow drModuleSettings in dsModuleSettings.Tables[0].Rows)
{
    if (!string.IsNullOrEmpty(dsModuleSettings.Tables[0].Rows[0]["SettingValue"].ToString()))
        userControl.Title = dsModuleSettings.Tables[0].Rows[0]["SettingValue"].ToString();
}

"UserControl.Title" - это пример, на самом деле его следует заменить следующим кодом:

        userControl.drModuleSettings["SettingName"] = dsModuleSettings.Tables[0].Rows[0]["SettingValue"].ToString();

Проблема в том, что я не знаю, как это сделать.

Пожалуйста, кто-нибудь, помогите мне.

Спасибо!

2 ответа

Решение

Вам нужно будет использовать Reflection.

Посмотрите на следующий код и ссылки:

Смотрите здесь: Установите свойство объекта, используя отражение

Также здесь: http://www.dotnetspider.com/resources/19232-Set-Property-value-dynamically-using-Reflection.aspx:

Этот код из приведенной выше ссылки:

// will load the assembly
Assembly myAssembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\MyClassLibrary.dll");

// get the class. Always give fully qualified name.
Type ReflectionObject = myAssembly.GetType("MyClassLibrary.ReflectionClass");

// create an instance of the class
object classObject = Activator.CreateInstance(ReflectionObject);

// set the property of Age to 10. last parameter null is for index. If you want to send any value for collection type
// then you can specify the index here. Here we are not using the collection. So we pass it as null
ReflectionObject.GetProperty("Age").SetValue(classObject, 10,null);

// get the value from the property Age which we set it in our previous example
object age = ReflectionObject.GetProperty("Age").GetValue(classObject,null);

// write the age.
Console.WriteLine(age.ToString());

Вы могли бы использовать dynamic свойства. Что бы это значило, userControl.drModuleSettings будет иметь тип dynamic,

Затем вы можете присвоить ему значение во время выполнения, как

userControl.drModuleSettings = new {SomeProperty = "foo", AnotherProperty = "bar"};

Подробнее о динамическом ключевом слове и DynamicObject здесь и здесь.

Примечание. Требуется C# 4.0 или выше.

Другие вопросы по тегам