2014-02-12 66 views
0

我想使用mysql中的表中的數據填充我的組合框,這裏是我的代碼,我看不到問題是什麼。我的組合框不返回任何數據,它只是空白。使用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 

回答

0

試試這個..!

如果dt.Rows.Count> 0,則

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

End If 
+0

嗨,我得到錯誤「數據綁定」不是system.windows.form.combobox – Livaren

+0

使用數據讀取器的成員來執行你的sql命令然後加這個代碼而不是'If'部分。 cbxCompanyName.items。添加(readername [0]); – Jegadeesh

1

試試這個

If dt.Rows.Count > 0 Then 

    cbxCompanyName.DataSource = dt 
    cbxCompanyName.DisplayMember = "Company Name" 
    cbxCompanyName.ValueMember = "Company Name" 

End If 
+0

謝謝,我補充說,但我認爲這也是我沒有加載組合框時加載窗體的情況。 – Livaren

+0

在'cbxCompanyName.SelectedIndexChanged'事件中這樣做有點奇怪,也許您應該將代碼移動到'Form.Load'事件中。 – ekad

+0

這就是我所做的,在我的部分愚蠢的錯誤 – Livaren

0

您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 按數字鍵盤上)。

當然,最好避免這些空間。
如果不是太晚了,我建議更改列名刪除空間

+0

我做了這個以及你之前建議,唯一的問題是我無法手動更改datagrid視圖中的列名稱,即使使用'frmClientDetails.DGVClient.Columns( 0).HeaderCell.Value =「Company Name」' – Livaren

+0

您的意思是'frmClientDetails.DGVClient.Columns(0).HeaderText =「Company Name」'? – Steve

+0

這就是我之前對列名沒有影響的地方,它應該是我綁定我的數據集的地方嗎? – Livaren

0

私人小組cbxCompanyName_SelectedIndexChanged(發件人爲System.Object的,E作爲System.EventArgs)把手cbxCompanyName.SelectedIndexChanged 昏暗CON作爲新的MySqlConnection 暗淡構造作爲字符串= 「服務器=本地主機;數據庫= BA的解決方案;用戶ID =根;密碼=」 嘗試 con.ConnectionString =構造 con.Open() 抓住前作爲SQLEXCEPTION MSGBOX(ex.Message) 終止嘗試

放置成組合框時

昏暗博士爲OleDbDataReader = cmd.ExecuteReader

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

結束子

0

的上述所有是正確的,但省略的一件事。爲了立即訪問該列表,必須爲選定的項目設置起始索引,或者在收集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中填充第一個圖像後立即從組合框中預加載第一個圖像,並且遇到此問題,因爲僅當用戶單擊組合框時才觸發選擇索引,而不是在數據加載時觸發。

-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")