使属性在DataGridView中可见但在PropertyGrid中不可见?

假设我有一个我希望在DataGridView中显示的属性,但是当PropertyGrid中显示相同的对象时却没有。 我知道我可以使用[Browsable(false)] ,但是它隐藏在两个视图中。 我也可以做一个gridView.Columns["blah"].Visible = false; ,但这与我想要的相反,因为它隐藏在DataGridView中而不是隐藏在PropertyGrid中。 有没有办法反过来? (没有创建一个全新的DataTable只是为了保持相同的数据减去一个字段,而是将所有内容重新绑定到那个 – 这真的是一种做事的kludge方式。)或者,我可以使用一个向DataGridView添加列的解决方案在实际课程中没有出现。

可以通过使用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仍然可以仅使用更多的编码工作来访问所有属性。

我仍然会使用Tergiver并将此行为称为错误,因为Browsable属性的文档明确说明了它仅用于属性窗口。

(信用证转到用户“maro”, url为http://www.mycsharp.de/wbb2/thread.php?postid=234565 )