DataGridView DataGridViewCheckBoxCell 的一个问题
DataGridView 有DataGridViewCheckBoxCell 列通过 datatable 绑定数据 值 Boolean
然后在 DataGridView1_CellClick 中 测试 值
Dim c As DataGridViewCheckBoxCell = DirectCast(Me.DataGridView1.Rows(e.RowIndex).Cells("signin"), DataGridViewCheckBoxCell)
输出 Console.WriteLine c.Value
发现一个问题 连续 click 一个单元格 的CheckBox 会有个问题
绑定后 CheckBox 单元格 首先 没有被选中 值是 F 【这个很显然 因为 datatable 的 值是F】
第一次 click CheckBox 单元格 变成蓝色 显示 T 输出 值 F 【这就是问题了】
第二次 click CheckBox 单元格 依旧蓝色 显示 F 输出 值 F
反复测试 我发现 只要不点别的单元格 那么输出的总是 原来 datatable的值
我估计是因为没有 失去焦点 所以 DataGridView 没有 更新 datatable的 值
问题是
如何即时更新?
或者说 获得 即时的 那个 值 --------------------编程问答-------------------- CellContentClick中处理 --------------------编程问答--------------------
不行啊 还是 连续一个值 --------------------编程问答-------------------- 把方法中的代码帖出来 --------------------编程问答--------------------
你是根本没看明白啊 已经写了
Dim c As DataGridViewCheckBoxCell = DirectCast(Me.DataGridView1.Rows(e.RowIndex).Cells("signin"), DataGridViewCheckBoxCell)
Console.WriteLine c.Value --------------------编程问答-------------------- 我意思是就这两行? --------------------编程问答--------------------
就2行 不行啊 这都有问题 写那么多做什么 --------------------编程问答-------------------- 所以我感觉你都没看明白问题 问题不在我写的代码
在于DataGridView1 的一个机制 --------------------编程问答-------------------- Me.DataGridView1.CurrentRow试试,我好像也遇到过 --------------------编程问答-------------------- Me.DataGridView1.CurrentRow 获取当前光标所在行不行吧? --------------------编程问答-------------------- Me.DataGridView1.CurrentRow 获取当前光标所在行可以 --------------------编程问答-------------------- Cellclick 事件和checkBoxclick事件 重合吧
我也不太清楚,但是将Checkbox的点击事件独立出来的话就能
在点击checkbox时表中的数据还没有更改
不要在CellClick中获得数据在修改后获得
cellclick 事件发生的较早
--------------------编程问答-------------------- 反正我是经常碰到编辑单元格后,在单元格失去焦点前值不生效的问题,所以我一般取值前都会加一句
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As New DataTable
dt.Columns.Add("a", Type.GetType("System.String"))
dt.Columns.Add("signin", Type.GetType("System.Boolean"))
dt.AcceptChanges()
dt.Rows.Add("aa", False)
dt.Rows.Add("bb", False)
DataGridView1.DataSource = dt
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim c As DataGridViewCheckBoxCell = DirectCast(Me.DataGridView1.Rows(e.RowIndex).Cells("signin"), DataGridViewCheckBoxCell)
Console.WriteLine(c.Value)
End Sub
Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
Dim c As DataGridViewCheckBoxCell = DirectCast(Me.DataGridView1.Rows(e.RowIndex).Cells("signin"), DataGridViewCheckBoxCell)
Console.WriteLine("changed " & c.Value)
End Sub
Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
If DataGridView1.CurrentCellAddress.X = 1 AndAlso _
DataGridView1.IsCurrentCellDirty Then
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
DataGridView.EndEdit()
补充:.NET技术 , VB.NET