在运行时转换 DataGridView 单元格类型

发布于 2024-11-08 00:02:17 字数 477 浏览 0 评论 0原文

我的 datagridview 有一个复选框列,仅对其显示的数据中的某些记录有效。对于复选框无效的记录,我希望不显示任何内容 - 例如空白文本框。

因此,我需要在运行时动态地将单元格类型从复选框单元格更改为文本框单元格。我不能简单地更改列数据类型,因为该列需要混合使用文本框和复选框单元格类型。

到目前为止我有下面的代码。

 this.deviceList1.DeviceGrid[colIndex, rowIndex] = new KryptonDataGridViewTextBoxCell()
 this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true;

但是,这会生成 DataGridView 数据错误:

System.FormatException:已格式化 单元格值的类型错误。

My datagridview has a checkbox column that is only valid for some records in the data it is displaying. For the records for which a checkbox is not valid I wish to display nothing - a blank textbox for example.

Thus i need to dynamically change the cell type at run time from a checkbox cell to a textbox cell. I cannot simply change the column data type as the column needs to have a mix of textbox and checkbox cell types.

So far I have the code below.

 this.deviceList1.DeviceGrid[colIndex, rowIndex] = new KryptonDataGridViewTextBoxCell()
 this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true;

Howver this generates a DataGridView data error:

System.FormatException: Formatted
value of the cell has a wrong type.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

入怼 2024-11-15 00:02:17

排序了。真的很简单。解决方案是确保为 Value 属性指定适当的值。即需要将其设置为字符串值。

this.deviceList1.DeviceGrid[colIndex, rowIndex] =  new KryptonDataGridViewTextBoxCell()
this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true;
this.deviceList1.DeviceGrid[colIndex, rowIndex].Value = "";

Sorted it. Simple really. Solution is to ensure that the Value property is given an appropriate value. I.e it needs to be set to a string value.

this.deviceList1.DeviceGrid[colIndex, rowIndex] =  new KryptonDataGridViewTextBoxCell()
this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true;
this.deviceList1.DeviceGrid[colIndex, rowIndex].Value = "";
只是偏爱你 2024-11-15 00:02:17

您可以使用相关单元格的 OnPaint 事件处理程序,并在控件上绘制一个空白方块。这有点老套,我确信还有其他选择,但它确实有效。

You could use the OnPaint event handler for the cell in question and draw a blank square over the control. It's kind of hacky and I'm sure there are other options, but it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文