在我之前提出的问题中,我想通过反射(reflection)来获取一些值(value)。
现在,由于反射,我想为对象设置值。

我想写这个:

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;

是否可以 ?

此致,

弗洛里安

编辑:我尝试了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

最佳答案

因此,您已经有一个PropertyInfo类型的ColumnsCollection对象?

您可以使用以下代码来获取和修改它:

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

基本上,您只需要将原始对象传递回PropertyInfo的GetValue方法即可,该方法将返回一个对象。只需将其转换为ColumnsCollection即可,您应该进行排序。

更新:

根据您的更新,您应该这样做:
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

10-08 13:33