2011-04-26 77 views
1

我有2個下拉列表,一個是狀態,另一個是城市。我試圖創建它,所以當用戶單擊狀態時,第二個下拉列表將填充來自數據表的城市名稱。將變量傳遞給動態下拉列表

下面是代碼

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<%--<cc2:CascadingDropDown ID="CascadingDropDown1" runat="server"> </cc2:CascadingDropDown>--%> 
<h1>Live Event Search Engine</h1><br /> 
State: <asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="ST_Code" DataValueField="ST_Code" /><asp:SqlDataSource 
    ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>" 
    SelectCommand="SELECT [ST_Code] FROM [State]"> 
    </asp:SqlDataSource> 
City: <asp:DropDownList ID="ddlCity" runat="server" DataSourceID="SqlDataSource2" DataTextField="RS_City" DataValueField="RS_City" /><asp:SqlDataSource 
    ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>" 
    SelectCommand="web_PublicProgramListbyState" SelectCommandType="StoredProcedure"> 
<SelectParameters> 
     <asp:SessionParameter Name="State" SessionField="ST_Code" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
     <asp:Button ID="Submit" runat="server" Text="Submit" /> 

</asp:Content> 

和後面的代碼是

Public Sub ddlState_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlState.SelectedIndexChanged 
     Me.ddlCity.Items.Clear() 
     Dim da As New SqlDataAdapter("web_PublicProgramListbyState", New SqlConnection(ConfigurationManager.AppSettings("dbConnection"))) 
     Dim ds As New DataSet 
     da.Fill(ds, "@State") 
     da.Dispose() 
     Me.ddlCity.DataSource = ds.Tables("Products") 
     Me.ddlCity.DataTextField = "ProductName" 
     Me.ddlCity.DataValueField = "ProductID" 
     Me.ddlCity.DataBind() 
    End Sub 
End Class 
+0

那麼你問的是什麼問題?有沒有錯誤,這是行不通的嗎? – 2011-04-26 16:49:13

+0

@布萊恩,它不起作用。來自「州」的變量不會傳遞給「城市」,城市下拉列表不會加載。我只是得到一個錯誤。 – FluxEngine 2011-04-26 16:50:41

+0

代碼顯示程序綁定而不是城市?無論如何,張貼在下面。 – 2011-04-26 16:53:45

回答

1

看起來您正試圖在您已經定義了一個SqlDataSource的情況下將數據集加入到這個數據集中。只需修改SqlDataSource的參數並重新綁定:

Public Sub ddlState_SelectedIndexChanged(...) 
    SqlDataSource2.SelectParameters.Clear() 
    SqlDataSource2.SelectParameters.Add(New Parameter("@State", DbType.String, ddlState.SelectedValue)) 
    ddlCity.DataBind() 
End Sub 

編輯:或者你可以使用一個ControlParameter作爲另一個答覆中提到在SqlDataSource2.SelectParameters引用ddlState.SelectedValue。只有技巧,你必須仔細管理你的默認值,所以ddlCity只會在你想要的時候綁定。

0

我沒有看到那裏的ddlState_SelectedIndexChanged事件寫入會話變量。這是必需的。

1

我會改變它到一個控制參數,只是調用數據綁定。無需自己做填充。

<asp:ControlParameter Name="State" ControlID="ddlState" Type="String" /> 

,然後在選擇時只要致電:

Me.ddlCity.DataBind() 

或者,如果你想刪除的隱藏代碼一起把它在一個更新面板的觸發器。