当前位置:编程学习 > C#/ASP.NET >>

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中处理 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
CellContentClick中处理


不行啊  还是 连续一个值 --------------------编程问答-------------------- 把方法中的代码帖出来 --------------------编程问答--------------------
引用 3 楼 whitewolf123 的回复:
把方法中的代码帖出来


你是根本没看明白啊  已经写了

Dim c As DataGridViewCheckBoxCell = DirectCast(Me.DataGridView1.Rows(e.RowIndex).Cells("signin"), DataGridViewCheckBoxCell)
Console.WriteLine c.Value --------------------编程问答-------------------- 我意思是就这两行? --------------------编程问答--------------------
引用 5 楼 whitewolf123 的回复:
我意思是就这两行?


就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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,