2012-05-24 220 views
0

这看起来很琐碎,我以前知道如何在同一时间做到这一点,但由于某种原因,我似乎无法让我的头围绕这个时候:下拉列表中选择值

我有两个表: HotelHotelRooms Hotel表有HotelID和其他酒店的详细信息和HotelID被发现在HotelRooms与不同的房型,每个房型有一个描述。 一家酒店可以有许多房型。

我有一个DropDownList,其中包含HotelIDRoomIDsHotelID来自会话变量。 HotelID是为DropDownList; but the list displays RoomType值. When Roomtypes are selected I want to display a GridView`与酒店房间的细节,如描述,价格等....

我不能这样做,因为我的DropDownList的值是HotelID被映射到Session ID。如何从DropDownList的选定值中获取酒店客房的详细信息?

更新:

代码的GridView:

 string intResortID = Request.QueryString("intResortID ") 
     string strRoomType = DropDownList2.SelectedValue; 
     string connStr = ConfigurationManager.ConnectionStrings["bdsConnectionString"].ConnectionString; 
     SqlConnection Con = new SqlConnection(connStr); 
     SqlDataAdapter sdr = new SqlDataAdapter("SELECT TOP (100) PERCENT tblAvail.dtm, tblResortsRooms.strRoomType, tblResortsRooms.strDescription, tblAvail.intQty, tblAvail.curPrice, tblAvail.intResortID, tblResortsRooms.intWSCode FROM tblAvailable INNER JOIN tblResortsRooms ON tblAvail.intResortID = tblResortsRooms.intResortID AND tblAvail.strRoomType = tblResortsRooms.strRoomType WHERE (tblResortsRooms.curRecRate > 0) AND (tblAvail.intResortID = @intResortID) AND (tblAvail.strRoomType = @strRoomType) AND (tblAvailable.dtm >= { fn CURDATE() }) ORDER BY tblResortsRooms.strRoomType",Con); 
     SqlParameter ResID = new SqlParameter("@intResortID", intResortID); 
     SqlParameter RoomType = new SqlParameter("@strRoomType", strRoomType); 
     sdr.SelectCommand.Parameters.Add(ResID); 
     sdr.SelectCommand.Parameters.Add(RoomType); 

 <asp:DropDownList ID="DropDownList2" runat="server" 
     DataSourceID="SqlDataSource2" DataTextField="strRoomType" 
     DataValueField="intResortID" 
     onselectedindexchanged="DropDownList2_SelectedIndexChanged" 
     AutoPostBack="True"> 
    </asp:DropDownList> 
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     SelectCommand="SELECT [intResortID], [strRoomType] FROM [tblResortsRooms] WHERE ([intResortID] = @intResortID)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownList1" Name="intResortID" 
       PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
+0

可你至少告诉我们一些代码? ^^ – Thousand

+0

以上更新的问题 – user1270384

+0

您在哪里以及如何填写您的下拉列表?你能证明吗? – Thousand

回答

2

'DropDownList1.SelectedValue'应该为您提供@intResortID的值。
'DropDownList2.SelectedValue'应该为您提供@strRoomType的值。

DropDownList2_SelectedIndexChanged应该运行查询filling东西(如DataTable)。
填充的DataTable应绑定到您的GridView。

尝试类似的东西在你的DropDownList2_SelectedIndexChanged方法如下:

string intResortID = Request.QueryString("intResortID "); 
string strRoomType = DropDownList2.SelectedValue; 
string connStr = ConfigurationManager.ConnectionStrings["bdsConnectionString"].ConnectionString; 
SqlConnection Con = new SqlConnection(connStr); 
SqlDataAdapter sdr = new SqlDataAdapter("SELECT TOP (100) PERCENT tblAvail.dtm, tblResortsRooms.strRoomType, tblResortsRooms.strDescription, tblAvail.intQty, tblAvail.curPrice, tblAvail.intResortID, tblResortsRooms.intWSCode FROM tblAvailable INNER JOIN tblResortsRooms ON tblAvail.intResortID = tblResortsRooms.intResortID AND tblAvail.strRoomType = tblResortsRooms.strRoomType WHERE (tblResortsRooms.curRecRate > 0) AND (tblAvail.intResortID = @intResortID) AND (tblAvail.strRoomType = @strRoomType) AND (tblAvailable.dtm >= { fn CURDATE() }) ORDER BY tblResortsRooms.strRoomType", Con); 
SqlParameter ResID = new SqlParameter("@intResortID", intResortID); 
SqlParameter RoomType = new SqlParameter("@strRoomType", strRoomType); 
sdr.SelectCommand.Parameters.Add(ResID); 
sdr.SelectCommand.Parameters.Add(RoomType); 
DataTable results = new DataTable(); 

sdr.Fill(results); 

resultsGridView.DataSource = results; //Assuming resultsGridView is the name of the GridView on your ASPX page. 
resultsGridView.DataBind(); 
+0

应该我的dropdownlist2有回发? – user1270384

+0

@ user1270384是的,只要希望在用户选择某个选项时更新GridView。 – Trisped

+0

然后没有它不工作... – user1270384

2

尝试下拉列表的SelectedItem.Text

+1

我得到错误对象引用未设置为对象的实例 – user1270384

+0

下拉列表中有哪些字段? HotelID作为DataValueField和RoomID作为DataTextField? – angusf

+0

是的,这是正确的@angusf – user1270384

0

听起来就像您需要在HotelRooms表中标识每个房间的新ID(主键)。如果你有这个,你可以用它作为下拉的值,问题就会消失。

+0

那么@John我的酒店房间ID是主键以及酒店房间的ID表,但因为它的酒店ID是数据字段值,而不是酒店房间ID我无法在我的GridView中显示任何东西,因为没有房间类型通过 – user1270384

+0

而不是复合主键,您可以添加一个ID字段作为新的主要键和使用这个值?这依赖于用户首先选择酒店,然后填写该酒店房间的下拉菜单。 – johnd

+0

我不明白你的意思,我已经尝试了一个酒店列表下拉列表和另一个房间列表下拉列表,但是当我选择房型时gridview没有任何反应 – user1270384