2011-04-26 214 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() 

或者,如果你想删除的隐藏代码一起把它在一个更新面板的触发器。