2013-04-18 91 views
0

我在我的db中有兩個表,BuildingRooms。我正在使用兩個下拉列表。目的是要有第一個下拉列表,ddlBuilding,用於選擇建築物名稱。選擇名稱時,我想查詢數據庫以僅查找與該建築物對應的房間號,並將其返回到房間下拉列表ddlRoomNumber中。
例如:將下拉列表值轉換爲字符串

大廈A具有房間1,2和3
建築B已經房間4,5和6

如果用戶從ddlBuilding選擇建築物A它們應與房間呈現1,2和3在ddlRoomNumber

我已經建立了一個查詢來做到這一點,但我得到一個錯誤,說dropdownlist不能轉換爲字符串。有問題的代碼是:

Protected Sub txtRoomNumber_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtRoomNumber.TextChanged 

    Dim db As New OrionDataClassesDataContext 

    Dim roomNumber = (From build In db.Buildings Join rm In db.Rooms On build.Building_code Equals rm.Building_code 
         Where build.Building_name = ddlBuilding 
         Select rm.Room_Number).distint 

    ddlRoomNumber.DataSource = roomNumber 
    ddlRoomNumber.DataBind() 

End Sub 

這是導致錯誤的行where build.Building_name = ddlBuilding。關於如何從下拉列表中拉出字符串並使用它來驗證我的查詢的任何想法。

我在一些響應和研究後將代碼更改爲以下代碼。它仍然沒有工作。 ddlRoomNumber未綁定到我的查詢。

Protected Sub ddlRoomNumber_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlRoomNumber.SelectedIndexChanged 

    Dim db As New OrionDataClassesDataContext 


    ddlRoomNumber.DataSource = (From build In db.Buildings Join rm In db.Rooms On build.Building_code Equals rm.Building_code 
           Where (build.Building_name = ddlBuilding.SelectedItem.Text) 
           Select rm.Room_Number, rm.Room_ID) 

    ddlRoomNumber.DataTextField = "Room_Number" 
    ddlRoomNumber.DataValueField = "Room_ID" 
    ddlRoomNumber.DataBind() 
End Sub 

這是asp頁面。有沒有什麼方法可以輸入linq數據源來將它指向我的vb查詢。

<asp:DropDownList ID="ddlRoomNumber" runat="server" AutoPostBack="True"> 
          </asp:dropdownlist> 

回答

1

您可以使用ddlBuilding.SelectedItem.Text代替ddlBuilding

+0

啊是有道理的。謝謝。我試圖現在測試它,但由於某種原因,下拉列表「ddlRoomNumber」被標記爲未綁定。當然,我的代碼的最後兩行應該將查詢綁定到列表no?有沒有別的辦法來綁定我的查詢? – Gavin

+0

你可以嘗試像這樣綁定http://stackoverflow.com/questions/2346381/populating-dropdown-list-in-vb-net –

+0

我不知道發生了什麼事。我已經在這個階段嘗試了幾種不同的綁定方法,包括你將我鏈接到的內容。我99%確定我輸入了合理的代碼,但它不會綁定到我的ddl。有任何想法嗎?我目前正在運行的代碼是: – Gavin