在为自定义 DataGridViewColumn 设置属性时访问 DataGridView 控件

Posted

技术标签:

【中文标题】在为自定义 DataGridViewColumn 设置属性时访问 DataGridView 控件【英文标题】:Accessing the DataGridView Control on setting Property for Custom DataGridViewColumn 【发布时间】:2019-06-20 00:47:32 【问题描述】:

可以帮助我了解如何在自定义DataGridViewColumn 的属性setter 中找到DataGridView 控件。我下面的代码返回null。我想获得我的自定义列的父 DataGridView

public class CustomComboBoxColumn : DataGridViewComboBoxColumn

  public string SomeProperty
  
    get  return _SomeProperty; 
    set
        
          _SomeProperty = value;
          CustomDataGridView dgv = this.DataGridView;  //this one is returning null

        
   

【问题讨论】:

您的 Datagridview id 是否称为“DataGridView”?这看起来就像您正在尝试将 dgv 返回设置为一种类型,除非那是对象 ID。因此,如果它是 id,那么它是否可能在某种模板或面板中? 我编辑了我的问题。错误是 this.DataGridView;总是返回null。那么有没有办法获取自定义列的父datagridview呢? 这个属性是什么时候设置的?该列是否已添加到 DGV 的 Columns 集合中?如果操作正确,该属性将返回它所属的 DGV。顺便说一句,使用var dgv = this.DataGridView; 【参考方案1】:

DataGridView(在 WinForms 中 - 从 post 标签判断)是 DataGridViewColumnCollection Class 的属性 - 而不是 DataGridViewColumn Class 的属性所以既然你是从 DataGridViewColumn 派生类,您必须将此属性从自定义列集合滴流到添加到其中的每个自定义列,也许您可​​以通过实现 Column.Collection 自定义属性使集合本身在每个添加的列中可访问,并且每次将列添加到集合时都会对其进行初始化。然后你可以在你的 CustomComboBoxColumn 类中使用类似这样的东西: CustomDataGridView dgv = this.CustomComboBoxColumnCollection.DataGridView; .

或者,考虑在包含它的集合中的 CustomComboBoxColumn 类中执行您打算执行的操作。在集合中,您可以访问CustomComboBoxColumnCollection.DataGridView 属性,然后在将新列添加到集合中时设置所需的结果。

做你觉得更自然且需要更少编码的事情:)

【讨论】:

以上是关于在为自定义 DataGridViewColumn 设置属性时访问 DataGridView 控件的主要内容,如果未能解决你的问题,请参考以下文章

在为自定义视图调用 NSBundle(使用 loadNibName)后访问 IBOutlets 的最佳方法

DataGridViewColumn.DataPropertyName 属性

使用千位逗号分隔符格式化 DataGridViewColumn

使用查询结果创建和绑定 DataGridViewColumn。将其添加到 DataGridView

如何在 DataGridViewColumn 中使用服务器 DateTime 格式而不是系统 DateTime 格式

JSP 自定义标签属性的默认值