在数据绑定组合框中添加空行的问题

时间:2016-12-21 15:46:15

标签: .net vb.net data-binding combobox

我想在我的组合框中添加一个没有值的空行。这是用户从组合框中选择某些内容然后想要取消选择它的情况。没有空行,这是必需的,因为我已经指出我可以执行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

1 个答案:

答案 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"

enter image description here

另一种,也许更好的方法是让SQL添加假行。在MySQL中,它将是:

SELECT  -1 As Id, '(Pick One)' As Descr UNION ALL SELECT Id, Descr FROM TABLE_NAME

由于Name通常是保留字,Descr用于说明目的。