我在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绑定到特定列。谢谢。
编辑:仔细研究后,我想我需要单独的复选框和文本框列
答案 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手动添加了列:
它为每行添加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列。