如何在DataGridView中的某一个单元格添加CheckBox?

howze 2018-11-23 02:41:41
从List中取出人员数据,一行一行的展示在DataGridView中
只在满足限定条件的人员行里才有checkbox,其他行没有
网上搜了半天,教程都是一添加就是一整列的
有什么办法能实现我上面的需求吗?

或者退一步,只在满足限定条件的人员的行里checkbox是可选的
其他行里隐藏或者readonly都行

无论哪个方法都行,有啥办法吗?谢谢!
...全文
1249 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
howze 2018-11-26
  • 打赏
  • 举报
回复
引用 13 楼 eaqpi 的回复:
[quote=引用 12 楼 howze 的回复:] [quote=引用 10 楼 eaqpi 的回复:] 你要的并不是checkbox,而仅仅是个 ✔或✘ 的话,用textbox也能解决问题。 设置 要点击的列为 readonly,然后判断 cellmouserclick事件,满足条件的写入 ✔或 ✘!!,不可设置的列还能放一个 ⊗。 如果想绑定数据源,那么,那列绑定 数据源的列设置为checkbox,设置为不可见,用上面的事件来手工设置checkbox的checked。
感谢,如果设置为readonly,还怎么写入 ✔或 ✘啊?[/quote] readonly 只是对客户而言,界面上不让用户输入字符而已,你代码里的写入是不受影响的。 Private Sub DGVForSelect_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DGVForSelect.CellMouseClick If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 AndAlso DGVForSelect.Columns(e.ColumnIndex).Name = "列名称" Then If DGVForSelect.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "✔" Then DGVForSelect.Rows(e.RowIndex).Cells("单元格的名称").Value = "✘" else DGVForSelect.Rows(e.RowIndex).Cells("单元格的名称").Value = "✔" endif End If End Sub [/quote] 好的,谢谢,我尝试一下。
eaqpi 2018-11-26
  • 打赏
  • 举报
回复
引用 12 楼 howze 的回复:
[quote=引用 10 楼 eaqpi 的回复:]
你要的并不是checkbox,而仅仅是个 ✔或✘ 的话,用textbox也能解决问题。

设置 要点击的列为 readonly,然后判断 cellmouserclick事件,满足条件的写入 ✔或 ✘!!,不可设置的列还能放一个 ⊗。

如果想绑定数据源,那么,那列绑定 数据源的列设置为checkbox,设置为不可见,用上面的事件来手工设置checkbox的checked。


感谢,如果设置为readonly,还怎么写入 ✔或 ✘啊?[/quote]


readonly 只是对客户而言,界面上不让用户输入字符而已,你代码里的写入是不受影响的。

Private Sub DGVForSelect_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DGVForSelect.CellMouseClick
If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 AndAlso DGVForSelect.Columns(e.ColumnIndex).Name = "列名称" Then
If DGVForSelect.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "✔" Then
DGVForSelect.Rows(e.RowIndex).Cells("单元格的名称").Value = "✘"
else
DGVForSelect.Rows(e.RowIndex).Cells("单元格的名称").Value = "✔"
endif
End If
End Sub

howze 2018-11-26
  • 打赏
  • 举报
回复
引用 10 楼 eaqpi 的回复:
你要的并不是checkbox,而仅仅是个 ✔或✘ 的话,用textbox也能解决问题。 设置 要点击的列为 readonly,然后判断 cellmouserclick事件,满足条件的写入 ✔或 ✘!!,不可设置的列还能放一个 ⊗。 如果想绑定数据源,那么,那列绑定 数据源的列设置为checkbox,设置为不可见,用上面的事件来手工设置checkbox的checked。
感谢,如果设置为readonly,还怎么写入 ✔或 ✘啊?
eaqpi 2018-11-26
  • 打赏
  • 举报
回复
如果还想要个框来提醒用户是点击的话, -->☐☑☒ .满足了吧!
eaqpi 2018-11-26
  • 打赏
  • 举报
回复
你要的并不是checkbox,而仅仅是个 ✔或✘ 的话,用textbox也能解决问题。

设置 要点击的列为 readonly,然后判断 cellmouserclick事件,满足条件的写入 ✔或 ✘!!,不可设置的列还能放一个 ⊗。

如果想绑定数据源,那么,那列绑定 数据源的列设置为checkbox,设置为不可见,用上面的事件来手工设置checkbox的checked。

早起晚睡 2018-11-26
  • 打赏
  • 举报
回复
有些东西是不是可以从业务设计的时候就不用这么考虑
howze 2018-11-24
  • 打赏
  • 举报
回复
引用 6 楼 fighting_1982 的回复:
可以在datarowbind的时候find这个checkbox设置他的visible属性就行了。不过我建议你早点弃用服务器控件,复杂功能实现起来很麻烦,而且最关键的是性能和体验根本就不行,是淘汰的东西。应该学学前后端分离开发了。
checkbox的visible是只读属性,只能取值不能赋值哦
我是小数位 2018-11-24
  • 打赏
  • 举报
回复
自己用GDI+绘制,我们的有的都是自己定义空间,用容器+自定义编辑控件,可以多种模式呈现,可以表头表身,可以单表头,可以gridview, 实现原理就是gdi+ 绘制,只有编辑的时候才根据你的条件,在指定的位置出现你的编辑控件
fighting_1982 2018-11-23
  • 打赏
  • 举报
回复
可以在datarowbind的时候find这个checkbox设置他的visible属性就行了。不过我建议你早点弃用服务器控件,复杂功能实现起来很麻烦,而且最关键的是性能和体验根本就不行,是淘汰的东西。应该学学前后端分离开发了。
howze 2018-11-23
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
DataGridViewTextBoxColumn 是整列 DataGridViewCheckBoxCell 是单个 已然是 DataGridViewTextBoxColumn 了,又不愿改 那就在 CheckBox 的点击事件里做下判断,不符合条件就不改变状态(相当于只读)
上面内容写错了,我修正一下 首先感谢版主大神。 我这里原先放了一列(总得有个列吧),类型是DataGridViewCheckBoxColumn,这个时候没法再放CheckBoxCell,我后面把类型改成了DataGridViewTextBoxColumn,然后通过代码往里面放CheckBoxCell,这时候就会提示类型不匹配,出异常。这有啥办法啊,能不能给个大概代码参考? 如果我继续用DataGridViewCheckBoxColumn,设置其他不满足条件的checkbox只读,倒是也能实现功能,但是看起来很不专业啊。
howze 2018-11-23
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
DataGridViewTextBoxColumn 是整列 DataGridViewCheckBoxCell 是单个 已然是 DataGridViewTextBoxColumn 了,又不愿改 那就在 CheckBox 的点击事件里做下判断,不符合条件就不改变状态(相当于只读)
首先感谢版主大神。 我这里原先放了一列(总得有个列吧),类型是DataGridViewTextBoxColumn,这个时候没法再放CheckBoxCell,我后面把类型改成了DataGridViewTextBoxColumn,然后通过代码往里面放CheckBoxCell,这时候就会提示类型不匹配,出异常。这有啥办法啊,能不能给个大概代码参考? 如果我继续用DataGridViewTextBoxColumn,设置其他不满足条件的checkbox只读,倒是也能实现功能,但是看起来很不专业啊。
xuzuning 2018-11-23
  • 打赏
  • 举报
回复 1
DataGridViewTextBoxColumn 是整列
DataGridViewCheckBoxCell 是单个

已然是 DataGridViewTextBoxColumn 了,又不愿改
那就在 CheckBox 的点击事件里做下判断,不符合条件就不改变状态(相当于只读)
howze 2018-11-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
把 DataGridViewCheckBoxCell 实例放在指定的单元格里 如 var chk = new DataGridViewCheckBoxCell(); dataGridView1.Rows[0].Cells[0] = chk;
可是我这一列已经设置成DataGridViewTextBoxColumn类型了 再放checkbox不行啊
xuzuning 2018-11-23
  • 打赏
  • 举报
回复 1
把 DataGridViewCheckBoxCell 实例放在指定的单元格里

var chk = new DataGridViewCheckBoxCell();
dataGridView1.Rows[0].Cells[0] = chk;

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧