在另一个选项卡上以编程方式设置DataGridView中的CheckBox值不会提交

时间:2015-07-18 19:34:39

标签: vb.net checkbox datagridview tabcontrol

我有一个带有两个标签的表单,每个标签都有一个DataGridView。 Tab1上的DGV1在表单加载时绑定到DataTable。 Tab2上的DGV2未在表单加载上绑定,但包含稍后要使用的CheckBoxColumn。

当我在DGV1中选择一行时,将填充DGV2并将DGV2上的每个复选框设置为True。

然而,在单击DGV1中的单元格并随后填充DGV2并且复选框设置为True后,当我第一次转到Tab2时,它们将恢复为Nothing。但是,一旦我看到了#34;通过单击第二个选项卡DGV2,我可以返回DGV1并单击同一行,现在实际上将检查复选框。

我尝试过使用Refresh和RefreshEdit无济于事。

Public Class Form1       
    Private ConnectionString As String = "..."

    Private Function GetDataTable(selectString) As DataTable
        Dim adapter As New SqlDataAdapter(selectString, ConnectionString)
        Dim dt As New DataTable
        Dim bs As New BindingSource

        adapter.Fill(dt)
        bs.DataSource = dt

        Return dt
    End Function

    Private Sub Form1_Load(...) Handles Me.Load
        DGV1.DataSource = GetDataTable("SELECT * FROM ...")
    End Sub

    Private Sub DGV1_CellClick(...) Handles DGV1.CellClick
        DGV2.DataSource = GetDataTable("SELECT * FROM ...")

        For i = 0 To dt.Rows.Count - 1
            DGV2.Item(0, i).value = True
        Next
    End Sub
End Class

这似乎只适用于CheckBoxColumn,因为我可以以相同的方式以编程方式编辑其他非复选框单元格并正确提交更改。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我能想到的最佳解决方案是在将DataTable设置为BindingSource之前向DataTable添加一个布尔列,而不是将CheckBoxColumn添加到DataGridView。

dt.Columns.Add("Selected", GetType(System.Boolean)).SetOrdinal(0)

不可否认,我无法弄清楚为什么这样可行,因为我仍然以编程方式设置DataGridView的CheckBoxColumn的值。