【问题标题】:Why DataGridView.AutoGenerateColumns has a Browsable(false) attribute applied?为什么 DataGridView.AutoGenerateColumns 应用了 Browsable(false) 属性?
【发布时间】:2012-04-10 20:27:35
【问题描述】:

我只是好奇为什么 Windows DataGridView 控件对设计器隐藏其 AutoGenerateColumns 属性?

这个问题实在想不出好答案。 有人吗?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    它看起来像被隐藏了,因为它是由一个辅助类控制的。根据the accepted answer to this question,DataGridViewDesigner 的 Initialize() 方法(一个未记录且非常隐藏的帮助器类)根据是否指定了 DataSource 来设置 DGV 的 AutoGenerateColumns 属性,这会覆盖您可能在自己的代码中指定的任何内容。

    逻辑是需要 DataSource 才能自动生成列;因此,让您在未指定的情况下尝试将此属性设置为 True 是无效的。相反,如果您在设计器中设置 DataSource,您可能希望 DGV 为您设置列,除非您还使用 Columns 属性设置了自己的列。

    您可以通过在派生类中覆盖它并指定[Browseable(true)] 属性来公开此属性。但是,正如上面的问题所示,您在构造函数或 InitializeComponent() 方法中设置的任何内容都将被 DGVDesigner 覆盖。

    【讨论】:

    • 有道理。我只是好奇并不真的需要改变它。只是给我留下了深刻的印象。无论如何,我仍然想知道 Windows 窗体 DataGrid 与其 ASP.NET 对应部分之间的区别在哪里。我的意思是,如果有任何微小的、奇怪的事情阻止了这些人以同样的方式实施这两种控制。感谢您的回答!
    • 有道理除了默认是真的!所以在构建它们时没有设计器,你必须意识到这个(有点)隐藏的属性。
    • 是的,默认情况下它是真的这一事实很奇怪。我始终相信,最好让用户能够在一开始就建立他需要的东西,而不是从他最可能不需要的东西开始,然后在他/她得到想要的结果之前删除东西。一个微软的谜团:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多