6

最近の質問では、リフレクションを介していくつかの値を取得したいと考えています。リフレクションのおかげで、オブジェクトに値を設定したいと思います。

私はこれを書きたい:

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 がスローされます

4

1 に答える 1

3

ということは、既に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直接変更しないのはなぜですか?

于 2010-07-05T13:31:16.610 に答える