Можно ли получить «объект» из PropertyInfo? - PullRequest
4 голосов
/ 05 июля 2010

В моих предыдущих вопросах я хочу получить некоторые значения с помощью размышлений. Теперь я хочу установить значения для объектов благодаря отражению.

Я хочу написать это:

private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info)
        {
            UltraGrid grille = (UltraGrid)control;
            SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>();

            if (grille != null)
            {
                // I want to write MapPropertyInfo method 
                ColumnsCollection cols = MapPropertyInfo(Info);

PropertyInfo содержит тип ColumnsCollection. Я просто хочу "сопоставить" свою PropertyInfo с объектом, чтобы определить некоторые свойства после: Например:

cols[prop.Nom].Hidden = false;

Возможно ли это?

С наилучшими пожеланиями,

Florian

РЕДАКТИРОВАТЬ: я пробовал решение GenericTypeTea, но у меня есть некоторые проблемы. Вот мой фрагмент кода:

        private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info)
    {
        UltraGrid grille = (UltraGrid)control;
        ColumnsCollection c = grille.DisplayLayout.Bands[0].Columns;

                    // Throw a not match System.Reflection.TargetException
        ColumnsCollection test = Info.GetValue(c,null) as ColumnsCollection;
        SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>();

Но исключение TargetException выброшено

1 Ответ

3 голосов
/ 05 июля 2010

Итак, у вас уже есть PropertyInfo объект типа ColumnsCollection?

Вы можете получить и изменить его, используя следующий код:

var original = GetYourObject();
PropertyInfo Info = GetYourPropertyInfo(original);
ColumnsCollection collection = Info.GetValue(original) as ColumnsCollection;

По сути, вам просто нужно передать исходный объект обратно в метод PropertyInfo GetValue, который вернет вам объект. Просто приведите это как ColumnsCollection, и вы должны быть отсортированы.

UPDATE:

На основании вашего обновления вы должны сделать следующее:

object original = grille.DisplayLayout.Bands[0];
PropertyInfo info = original.GetProperty("Columns");

ColumnsCollection test = info.GetValue(original, null) as ColumnsCollection;

Вы должны получать Info PropertyInfo от объекта другого типа. Хотя я думаю, что мы решаем не ту проблему здесь. Я не понимаю, чего ты пытаешься достичь. Почему бы просто не изменить grille.DisplayLayout.Bands[0].Columns напрямую?

...