在只读对象属性上编辑 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的主要内容,如果未能解决你的问题,请参考以下文章