6

DataGridViewに表示したいプロパティがありますが、同じオブジェクトがPropertyGridに表示されている場合はそうではないとします。私は使用できることを知っています[Browsable(false)]が、それは両方のビューでそれを隠します。を実行することもできますがgridView.Columns["blah"].Visible = false;、これは、DataGridViewには非表示になり、PropertyGridには非表示になるため、私が望むものとは逆になります。逆を行う方法はありますか?(同じデータから1つのフィールドを除いたものを保持するためだけに、まったく新しいDataTableを作成し、代わりにすべてを再バインドするのは簡単です。これは、実際に物事を行うための厄介な方法です。)または、DataGridViewに列を追加するソリューションを使用することもできます。それは実際のクラスには存在しません。

4

1 に答える 1

6

PropertyGridのBrowsableAttributesプロパティを使用することで、この問題を解決することができます。まず、次のような新しい属性を作成します。

public class PropertyGridBrowsableAttribute : Attribute
{
    private bool browsable;
    public PropertyGridBrowsableAttribute(bool browsable){
        this.browsable = browsable;
    }
}

次に、PropertyGridに表示するすべてのプロパティにこの属性を追加します。

[DisplayName("First Name"), Category("Names"), PropertyGridBrowsable(true)]
public string FirstName {
    get { return ... }
    set { ... }
}

次に、BrowsableAttributesプロパティを次のように設定します。

myPropertyGrid.BrowsableAttributes = new AttributeCollection(
    new Attribute[] { new PropertyGridBrowsableAttribute(true) });

これにより、プロパティグリッド内の属性付きプロパティのみが表示され、DataGridViewは、わずかなコーディング作業ですべてのプロパティにアクセスできます。

Browsable属性のドキュメントには、プロパティウィンドウでの使用のみが明確に記載されているため、私は引き続きTergiverを使用して、この動作をバグと呼びます。

(クレジットはhttp://www.mycsharp.de/wbb2/thread.php?postid=234565のユーザー「maro」に送られます)

于 2012-08-31T15:05:24.107 に答える