【问题标题】:C# DataGridView, custom property from columns editor is not savedC# DataGridView,来自列编辑器的自定义属性未保存
【发布时间】:2012-08-13 02:08:50
【问题描述】:
我的表单中有一个 datagridview。这个 datagridview 有一些列。有一些自定义列(我创建了自定义 datagridview 单元格)。这些自定义单元格有一些属性,我想在设计时从 datagridview 的列编辑器中看到这些属性,以便设置它们。所以在设计时,我打开 datagridview 的列编辑器,并创建自定义 datagridview 单元格的列。然后,我设置了一些自定义属性并关闭了 datagridview 的 olumns 编辑器。当我打开 datagridview 的列编辑器时,我之前为这些自定义属性设置的值不会反映,似乎一旦 datagridview 的列编辑器关闭,它们就没有保存。所以为什么?为什么不保存自定义属性的值?我做错了什么?
此外,我不能将这些自定义属性留空,因为一旦加载表单就会引发异常(对象引用未设置为对象的实例)。
如果有人可以帮助我,我非常感谢。
【问题讨论】:
标签:
c#
properties
datagridview
custom-attributes
【解决方案1】:
我遇到了同样的问题。经过搜索,我在一个微软网站上发现了一些反馈,说我必须在我的datagridviewtextboxcolumn 派生中实现iCloneable。
你可以找到文章here和相关部分:
在极少数情况下,列类型可能希望公开一个属性
在单元级别没有等效属性。这方面的例子是
DataGridViewLinkColumn.Text 和 DataGridViewImageColumn.Image。在
在这些情况下,列类需要重写 Clone 方法以
复制该属性。
我的专栏添加了四个额外的属性,这是我的可克隆函数:
//Override this method to set the custom properties.
public override object Clone()
{
var col = base.Clone() as BauerDataGridViewTextBoxColumn;
col.ShowBorder = this.ShowBorder;
col.BorderColor = this.BorderColor;
col.ColumnChooserIsOptional = this.ColumnChooserIsOptional;
col.ColumnChooserColumnLabel = this.ColumnChooserColumnLabel;
return col;
}