2017-04-10 23 views
1

我想在從列表框中選擇項目時填充datagridview。使用列表框中的值構造字符串

我的代碼給了我這個錯誤:

Operator '&' is not defined for string "SELECT DeptName FROM Department" and type 'DataRowView'.

這是我的代碼:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 
    cmd = New OleDbCommand("SELECT DeptName FROM Departments inner JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" & ListBox1.SelectedValue & "'", conn) 
    Dim daa As New OleDbDataAdapter(cmd) 
    Dim dtt As New DataTable 
    daa.Fill(dtt) 
    dgv.DataSource = dtt 
End Sub 

回答

0

ListBox1.SelectedValueDataRowView,所以你不能把它添加到字符串。你可能會想是這樣的:

"SELECT DeptName FROM Departments inner JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" _ 
    & ListBox1.SelectedValue["yourColumn"].ToString() & "'" 

或者

"SELECT DeptName FROM Departments inner JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" _ 
    & ListBox1.SelectedValue[columnIndex].ToString() & "'" 
1

有幾個方式來看待這一點。

您可以預先在ListBox1上設置ValueMember下面是ListBox的值爲1到10的示例及其正方形。 ValueMember是FacID,它只是數字。 DisplayMember是FacID的正方形(用於演示目的!),證明您不需要顯示值成員。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim i As Integer 
    Dim table As New DataTable() 
    Dim column1 As New DataColumn("FacID") 
    Dim column2 As New DataColumn("Square") 
    table.Columns.Add(column1) 
    table.Columns.Add(column2) 
    For i = 0 To 9 
     Dim row As DataRow = table.NewRow() 
     row("FacID") = i 
     row("Square") = i^2 
     table.Rows.Add(row) 
    Next i 
    Dim view As New DataView(table) 
    ListBox1.DataSource = view 
    ' set the DisplayMember and ValueMember 
    ListBox1.DisplayMember = "Square" 
    ListBox1.ValueMember = "FacID" 
End Sub 

Private Sub ListBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ListBox1.Click 
    Dim message = "Selected value: " & ListBox1.SelectedValue.ToString() 
    MessageBox.Show(message) 
End Sub 

這是ListBox的將是什麼樣子,在運行時

enter image description here

當它被點擊時,顯示所選擇的值

如果消息這是在運行你提供的代碼之前完成的,那麼你幾乎可以使用你的代碼,因爲現在是ListBox1.ValueMember是一個整數。請注意,您應該更嚴格,並將整數轉換爲字符串以準備查詢。

Dim query = 
    "SELECT DeptName FROM Departments " & 
    "inner JOIN Faculties ON Faculties.ID = Departments.FacID " & 
    "where FacID = '" & ListBox1.SelectedValue.ToString() & "'" 

你也可以設置ValueMember。當未指定ValueMember時,您的SelectedValue默認爲DataSource中的類型,即DataView,對於所有意圖和目的,IListDataRowView

由於沒有DisplayMember,列表框看起來像這樣

enter image description here

我認爲它不喜歡這一點。所以只需預先設置ValueMember,你應該全部設置。

相關問題