2013-04-18 55 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