我想在我的组合框中添加一个没有值的空行。这是用户从组合框中选择某些内容然后想要取消选择它的情况。没有空行,这是必需的,因为我已经指出我可以执行DELETE单击并将所选索引设置为-1。用户想要在组合框的顶部有一个空行。我正在装这样的组合框....
sql="Select ID, Name from TblReference"
Dim da As New SqlDataAdapter(Sql, conn)
Dim ds As New DataSet
da.Fill(ds, "Dk")
'在这里我试图添加额外的行!这是以前由@Plutonix提供给我的。我无法让它发挥作用。
Dim dr As DataRow = ds.Tables("Dk").NewRow
ds.Tables("Dk").Rows.InsertAt(dr, 0)
If ds.Tables("Dk").Rows.Count > 0 Then
With c
.DataSource = ds.Tables("Dk")
.ValueMember = "ID"
.DisplayMember = "Name"
.SelectedIndex = -1
End With
End If
在这种情况下,C - 是我传递给此函数的组合框名称。我对多个组合框使用相同的功能,这就是我需要它的原因。
错误说:
无法转换类型&System; System.Data.DataRow'输入 ' SystemIconvertible&#39 ;.无法在ID列中存储system.data.datarow 期望的类型是int32
答案 0 :(得分:1)
添加到DataTable
的新行必须符合从DB读取的数据规则。在您的情况下,它知道Id必须是有效的Int32
,但您没有为您的行提供任何数据:
Dim dr = dtSample.NewRow
dr("Id") = -1
dr("Descr") = "(Blank)"
dtSample.Rows.InsertAt(dr, 0)
cboE.DataSource = dtSample
cboE.DisplayMember = "Descr"
cboE.ValueMember = "Id"
另一种,也许更好的方法是让SQL添加假行。在MySQL中,它将是:
SELECT -1 As Id, '(Pick One)' As Descr UNION ALL SELECT Id, Descr FROM TABLE_NAME
由于Name
通常是保留字,Descr
用于说明目的。