添加布尔列,以便在DataGridView中为CheckBoxColumn绑定SQL结果

时间:2015-09-08 15:57:52

标签: vb.net datagridview

我在DataGridView中有一个CheckBoxColumn,每次我的SQLReader.Read()为true时,我都试图用一个未选中的框填充CheckBoxColumn(如果在循环中调用了SqlReader.Read 10次,那么应该有10个复选框)。这是我到目前为止的代码,这是错误的:

DataGridView1.DataSource = sqlReader

Using sqlReader As SqlDataReader = sqlCommand.ExecuteReader
    If sqlReader.HasRows Then
        While sqlReader.Read
            DataGridView1.Refresh()
        End While
    End If
End Using 

我找到了一种方法来添加复选框,而无需将sqlReader数据绑定到列,但我只是想知道是否可以这样做。我无法弄清楚如何将SqlReader绑定到特定列。谢谢。

编辑:仔细研究后,我想我需要单独的复选框和文本框列

1 个答案:

答案 0 :(得分:1)

不清楚SQLReader.Read()与检查列有什么关系,但你可以添加"虚拟"数据源的列以及您正在读取的实际数据。

Dim sql As String = "SELECT Name, Species, Gender, False As Picker FROM Animal"

Using dbcon As OleDbConnection = ...
    Using cmd As New OleDbCommand(sql, dbcon)
        dbcon.Open()

        dtAnimals = New DataTable()
        Using da As New OleDbDataAdapter(cmd)
            da.Fill(dtAnimals)
        End Using

    End Using
End Using

dgv.AutoGenerateColumns = False
dgv.DataSource = dtCat

False As Picker将Bool列添加到结果集中,该列实际上并不在DataBase中。您也可以使用表达式而不是文字False。 DGV手动添加了列:

enter image description here

它为每行添加Picker。好消息是底层字段与DB Data位于同一容器中,而不仅仅是在DGV中。

由于部分问题听起来像是要添加新行,因此积累结果会有一个小的变化。

Using cmd As New OleDbCommand(sql, dbcon)
    dbcon.Open()

    'dtAnimals = New DataTable()           ' use the old one!
    Using da As New OleDbDataAdapter(cmd)
        da.Fill(dtAnimals)
    End Using

End Using

通过创建New DataTable,新数据将添加到现有结果集中。如果您需要跟踪/分组行,则可以添加SequenceID而不是bool,而不是Picker / bool列。