在只读对象属性上编辑 DataGridViewCell

Posted

技术标签:

【中文标题】在只读对象属性上编辑 DataGridViewCell【英文标题】:Edit DataGridViewCell on readonly object property 【发布时间】:2020-05-26 23:47:13 【问题描述】:

我已将 DataGridView 绑定到 BindingList<MyObj>,它的 Value 属性为只读(受保护)。

所以我有一种方法可以改变它的值 (MyObj.SetValue(string newValue))。

DataGridView 的标准行为也是锁定单元格编辑,但没有办法“模拟”编辑然后传递正确的方法来更新值?

我尝试设置column.ReadOnly = false,但它引发了异常。它不会触发 CellBeginEdit 事件,所以我必须在它前面创建另一个文本框来执行此操作吗?

【问题讨论】:

向 DataGridView 添加一个不绑定到您的类的任何属性的列,并在此列的单元格的值发生变化时调用公共方法。当您实际想要更改它的值时(因为您将它绑定到 DGV,即),为什么您有一个只读属性并不完全清楚。你可以做公共方法在属性设置器中所做的事情吗?或者使用验证功能来验证/拒绝一个不正确的值(也许使用你的类对象的公共或非公共方法,为什么不) 当您将column.ReadOnly 属性更改为false 时,您究竟会得到什么异常? 【参考方案1】:

根据 MSDN,似乎唯一的例外是:

例外 无效操作异常 设置该属性时没有所属行。

-或-

设置此属性时共享所属行。

因此,请检查是否真的是 OwningRow,或者该行是否恰好是共享的。

另外,Remark section 说:

ReadOnly 属性表示单元格显示的数据是否可以编辑。 > > 您可以为单个单元格设置 ReadOnly,也可以通过设置 DataGridViewRow.ReadOnly 或 DataGridViewColumn.ReadOnly > > 属性将 > > 单元格的整行或整列设为只读。默认情况下,如果单元格的父行或列设置为只读,则子 > 单元格将采用相同的值。您可以通过为单个单元格设置 > > > > ReadOnly 来覆盖此默认行为。

您可以导航到只读单元格,并且可以将只读单元格设置为当前 > 单元格。

ReadOnly 只影响单元格是否可编辑;不影响用户>>是否可以删除行。

听起来一切都在那里。

【讨论】:

感谢您的回复!我之前尝试将单元格设置为 ReadOnly = false,但我做不到,因为 DataGridView 绑定到一个具有 ReadOnly 属性的对象,所以我认为默认情况下它可能会采用对象设置。所以,然后我确实创建了另一个具有其他属性的对象,我稍后会在 Save() void 上更新这些属性...

以上是关于在只读对象属性上编辑 DataGridViewCell的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象编程第19篇 只读属性

Python面向对象编程第19篇 只读属性

在C# winform 程序里设置 DataGrid 为只读属性。

编辑只读 javascript 对象

Phonegap 中的只读文本输入字段是可编辑的

idea java文件只读状态 不可编辑怎么修改回可编辑状态…啊…各位亲……