【问题标题】:Populate combobox with data from MySQL使用来自 MySQL 的数据填充组合框
【发布时间】:2014-03-10 13:57:17
【问题描述】:

我正在尝试用 mysql 中的表中的数据填充我的组合框,这是我的代码,我看不出问题出在哪里。我的组合框没有返回任何数据,它只是空白。

    Private Sub cbxCompanyName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbxCompanyName.SelectedIndexChanged
    Dim con As New MySqlConnection
    Dim constr As String = "Server=localhost;database=ba-solutions;user id=root;password="
    Try
        con.ConnectionString = constr
        con.Open()
    Catch ex As SqlException
        MsgBox(ex.Message)
    End Try

    Dim StrSql As String = "SELECT Company Name FROM client_details"
    Dim cmd As New MySqlCommand(StrSql, objconnection)
    Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
    Dim dt As New DataTable("Client_details")

    da.Fill(dt)


    If dt.Rows.Count > 0 Then

        cbxCompanyName.DataSource = dt
        cbxCompanyName.DisplayMember = "Company Name" 'What is displayed

    End If

End Sub

【问题讨论】:

    标签: mysql vb.net combobox dataset xampp


    【解决方案1】:

    试试这个代码,我希望它能工作

    Dim con As New MySqlConnection("connection string")
    Dim da As New MySqlDataAdapter("SELECT * FROM tableName", con)
    Dim dt As New DataTable
    
    da.Fill(dt)
    ComboBox1.DisplayMember = "fieldName to show in ComboBox"enter code here
    ComboBox1.DataSource = dt
    TextBox1.DataBindings.Add("Text", dt, "fieldName to show in textbox")
    

    【讨论】:

      【解决方案2】:

      当放入组合框时,以上所有内容都是正确的,但有一点被省略了。为了立即访问该列表,必须为所选项目设置起始索引,否则当您去收集 ComboBox1.Text 的内容时,您将返回“System.Data.DataRowView”的内容。

      da.SelectCommand = cmd
      ds = New DataSet
      Dim dt As New DataTable
      da.Fill(ds, Table)
      ComboBox1.DataSource = ds.Tables(0)
      ComboBox1.DisplayMember = "imgURL"
      conn.Close()
      da.Dispose()
      conn.Dispose()
      ComboBox1.SelectionStart = 0 'This is what is missing from above.
      Dim current_imgURL As String = "http://10.1.1.10/photos/" & ComboBox1.Text
      PictureBox1.Image = New Bitmap(New IO.MemoryStream(New WebClient().DownloadData(current_imgURL)))
      

      此示例加载带有图像文件名的组合框,并从服务器位置拉取它们。我想在从 MySql 填充组合框后立即从组合框中预加载第一张图像并遇到此问题,因为选择索引仅在用户单击组合框时触发,而不是在加载数据时触发。

      【讨论】:

        【解决方案3】:

        Private Sub cbxCompanyName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) 处理 cbxCompanyName.SelectedIndexChanged Dim con 作为新的 MySqlConnection Dim constr As String = "Server=localhost;database=ba-solutions;user id=root;password=" 尝试 con.ConnectionString = constr con.Open() 捕获 ex As SqlException 消息框(例如消息) 结束尝试

        Dim StrSql As String = "SELECT Company Name FROM client_details"
        Dim cmd As New MySqlCommand(StrSql, objconnection)
        

        Dim dr As OleDbDataReader=cmd.ExecuteReader

         While dr.Read
             cbxCompanyName.items.add(dr.item(0))
         End While
         dr.close()
        

        结束子

        【讨论】:

          【解决方案4】:

          你的 sql 命令文本是错误的。当列名或表名中有空格时,应将名称括在一个特殊字符中,该字符分隔列名的开始和结束。

          Dim StrSql As String = "SELECT `Company Name` FROM client_details"
          Dim cmd As New MySqlCommand(StrSql, objconnection)
          Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
          Dim dt As New DataTable("Client_details")
          

          对于 MySql,这个特殊字符是反引号(按住 ALT 并在数字键盘上按 096)。

          当然最好完全避免这些空格。
          如果还不算太晚,我建议更改该列名删除空格

          【讨论】:

          • 在你建议之前我也这样做了,我遇到的唯一问题是即使在使用 frmClientDetails.DGVClient.Columns(0).HeaderCell.Value = "Company Name" 之后我也无法手动更改数据网格视图中的列名
          • 您的意思是frmClientDetails.DGVClient.Columns(0).HeaderText = "Company Name" 吗?
          • 那是我在它对列名没有影响之前所拥有的,它应该是我绑定数据集的位置吗?
          • 我不明白,我们将数据表绑定到组合框,而不是数据网格视图。你能解释一下吗?
          • 你在第一个答案中告诉我在我的列名中不要有空格,我改变了。我有空格的唯一原因是我无法手动更改数据网格中的列名。我在你给我的第二个回复中使用了代码,但它没有效果,你能告诉我具体放在哪里吗?
          【解决方案5】:

          试试这个

          If dt.Rows.Count > 0 Then
          
              cbxCompanyName.DataSource = dt
              cbxCompanyName.DisplayMember = "Company Name"
              cbxCompanyName.ValueMember = "Company Name"
          
          End If
          

          【讨论】:

          • 谢谢,我补充说,但我认为这也是我在加载表单时没有加载组合框的情况。
          • cbxCompanyName.SelectedIndexChanged事件中这样做有点奇怪,也许你应该将代码移到Form.Load事件中。
          【解决方案6】:

          试试这个..!

          如果 dt.Rows.Count > 0 那么

              cbxCompanyName.DataSource = dt
              **cbxCompanyName.DataBind();**
          
          End If
          

          【讨论】:

          • 嗨,我收到错误“数据绑定”不是 system.windows.form.combobox 的成员
          • 使用数据阅读器执行您的 sql 命令,然后添加此代码而不是 'If' 部分。 cbxCompanyName.items.add(readername[0]);
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-07
          • 2014-07-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多