不会在组合框上添加默认的自定义行

时间:2019-01-25 05:58:05

标签: vb.net visual-studio

在组合框中显示一个空项目作为默认选定项目时遇到问题。此组合框是我的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。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

嗯,我只是更仔细地看了一下代码,实际上您不是在分配包含“ <>”的String,而是一个空的String。但这并不重要。 StringString,您不能在需要数字的地方放置一个。您可能可以使用包含数字的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更合适,因为它实际上是没有值,而不是没有字符的值。