【问题标题】:Make a property visible in DataGridView but NOT in PropertyGrid?使属性在 DataGridView 中可见但在 PropertyGrid 中不可见?
【发布时间】:2012-05-30 09:22:57
【问题描述】:

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

【问题讨论】:

  • 当他们真正回答我的问题时,我会接受他们。我的问题有一半几乎没有任何意见,更不用说好的回答了。
  • 我称这是一个错误。 Browsable 特别声明它决定了成员在属性窗口中的可见性。这与 DGV 无关。您可以打开一个连接问题,但他们修复它的几率正好为零。修复无疑会破坏现有代码。我认为你在这里不走运。
  • 该死的。当然,他们可以添加一个新的装饰器,而不是尝试修复 Browsable,但仍然很糟糕,没有办法做到这一点。你会认为这不会是一个不常见的请求......
  • 是的,他们不会修复它还有另一个原因,即使它是一个非破坏性修复:WinForms 自 2.0 以来就没有被触及;它被认为已被 WPF 取代。

标签: c# properties datagridview hide propertygrid


【解决方案1】:

可以通过使用 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 属性的文档清楚地说明了它仅用于属性窗口。

(归功于http://www.mycsharp.de/wbb2/thread.php?postid=234565 的用户“maro”)

【讨论】:

  • 嗯,距离我上次接触这个项目已经 3 个月了,其中与此相关的部分已经完全重构,所以我不能再测试了,但我会继续前进无论如何接受这个答案,因为它是我唯一的答案,而且它看起来有效......
  • 几天前我偶然发现了这个,遇到了同样的问题。它绝对像一个魅力!但很有趣的是,这似乎只被触摸过几次,只有一个人提出了解决方案……嗯,现在它也有英文版本了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
相关资源
最近更新 更多