在组合框中显示一个空项目作为默认选定项目时遇到问题。此组合框是我的gridview的筛选器,当前我的datagridview基于组合框的第一项显示所有数据,但我想要的是拥有一个空的第一组合框项,以便datagridview将从数据库中提取所有数据。当我运行该应用程序时,它会显示
System.ArgumentException:'输入字符串不正确 格式。无法将<>存储在ailment_id列中。预期类型为 Int32。'
我的代码从数据库填充组合框:
Private Sub populateComboAilment()
data_adapter = New MySqlDataAdapter("SELECT * FROM ailment", myconnection.open())
Dim data_table As New DataTable
data_adapter.Fill(data_table)
'assign default value
Dim row As datarow = data_table.NewRow()
row(0) = ""
data_table.Rows.InsertAt(row, 0)
comboAilment.DataSource = data_table
With comboAilment
.DisplayMember = "name"
.ValueMember = "ailment_id"
End With
myconnection.close()
End Sub
更新:当我将组合框ValueMember更改为
name
,因为它是以前的ID。但是当我选择另一个项目时 在gridview上不显示任何内容,因为我的datagridview查询没有 知道名称,因为它是外键,所以只知道ID。
任何帮助将不胜感激!
答案 0 :(得分:0)
嗯,我只是更仔细地看了一下代码,实际上您不是在分配包含“ <>”的String
,而是一个空的String
。但这并不重要。 String
是String
,您不能在需要数字的地方放置一个。您可能可以使用包含数字的String
,因为它可以隐式转换为数字,但是空的String
不符合要求。
如果您想要DataRow
中的空白字段,则需要执行ADO.NET来表示数据库空值的操作,即使用DBNull.Value
。这意味着对象类型为DBNull
,这是必需的,因为ADO.NET早于可空值类型。您不能只使用Nothing
,因为它将适用于引用类型,但不适用于值类型,例如如果将Nothing
分配给Integer
变量,则实际上是将其设置为零。
简而言之,您需要更改此内容:
Dim row As datarow = data_table.NewRow()
row(0) = DBNull.Value
row(1) = DBNull.Value
data_table.Rows.InsertAt(row, 0)
在name
列的情况下,其数据类型为String
,因此您可以在此处使用空的String
(最好使用String.Empty
而不是“”,但是两者都可以),但null更合适,因为它实际上是没有值,而不是没有字符的值。