2012-05-23 9 views
6

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

+1

彼らは実際に私の質問に答えるとき、私はそれを受け入れるだろう。私の質問の半分は、まったくの見解がありました。 –

+1

私はこれをバグと呼んでいます。 'Browsable'は、それがプロパティウィンドウ内のメンバの可視性を決定すると具体的に述べている。これはDGVとは関係ありません。あなたは接続問題を開くことができますが、それを修正する可能性はまったくゼロです。修正は、間違いなく既存のコードを破ることになります。あなたはここで運が悪いと思う。 – Tergiver

+0

Damn。もちろん、彼らはBrowsableを修正しようとするのではなく、新しいデコレータを追加することができますが、これを行う方法がないことはまだ残念です。あなたはそれがあまり一般的ではないと思うでしょう。 –

答えて

6

PropertyGridのBrowsableAttributesプロパティを使用してこの問題を解決することは可能です。 まず、このような新しい属性を作成します。そして、あなたはあなたのPropertyGridのに示すことにしたいすべてのこれらのプロパティには、この属性を追加

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

を:

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

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

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

これはプロパティグリッドの属性付きプロパティのみを表示し、DataGridViewは引き続きすべてのプロパティにアクセスできますもう少し多くのコーディング努力が必要です。

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

(クレジットはhttp://www.mycsharp.de/wbb2/thread.php?postid=234565でユーザー「マロ」に行く)

+0

さて、このプロジェクトに最後に触れてから3ヶ月ですが、これに関連する部分は完全にリファクタリングされていますので、これ以上テストすることはできませんが、この答えはどうにかして受け入れます。私が持っている唯一のもの、そしてそれは見通しです... –

+0

私は数日前に同じ問題を抱えてこれを見つけました。間違いなくチャームのように機能します! しかしこれは非常に興味深いことですが、これはほんの数回しか触られておらず、1人だけが解決策を思いついたようです...今は英語でも利用できます。 – Sebastian

関連する問題