如何使用在运行时绑定了connectionstring的sqldatasource填充Asp.net下拉列表?

如何使用在运行时绑定了connectionstring的sqldatasource填充Asp.net下拉列表?,asp.net,sql-server,vb.net,Asp.net,Sql Server,Vb.net,所以,我一直在与这个问题斗争,时间比我想承认的要长,而且似乎找不到关于我做错了什么的信息。因此,我谦虚地提出这个问题 我有两个下拉列表和数据源,定义如下: <asp:DropDownList ID="ddAdminYear" runat="server" enabled="false" DataTextField="YEAR_ID" DataValueField="YEAR_ID" AutoPostBack="True" AppendDataBoundItems="true"&g

所以,我一直在与这个问题斗争,时间比我想承认的要长,而且似乎找不到关于我做错了什么的信息。因此,我谦虚地提出这个问题

我有两个下拉列表和数据源,定义如下:

<asp:DropDownList ID="ddAdminYear" runat="server" enabled="false"      DataTextField="YEAR_ID" DataValueField="YEAR_ID" AutoPostBack="True" AppendDataBoundItems="true">
<asp:ListItem Text="----------" Value="----------" /></asp:DropDownList>
<asp:SqlDataSource ID="sdsAdminDistinctYr" runat="server"
ProviderName="System.Data.SqlClient" SelectCommand="SELECT DISTINCT YEAR_ID FROM  PC_YEAR ORDER BY YEAR_ID" DataSourceMode="DataReader"></asp:SqlDataSource>

<asp:DropDownList ID="tbOneUnit" runat="server" AutoPostBack="True" 

DataTextField="LONG_DESC" DataValueField="SHORT_DESC_EN" AppendDataBoundItems="True" Enabled="True">
    <asp:ListItem Text="----------" Value="----------" /></asp:DropDownList>
    <asp:SqlDataSource ID="sdsAdminMunic" runat="server" Onselecting="eventselect" ProviderName="System.Data.SqlClient" SelectCommand="GET_MUNIC_LISTING_VB" SelectCommandType="StoredProcedure" >
<SelectParameters> 
      <asp:controlparameter DefaultValue="2017"     Name="year" controlid="ddAdminYear" propertyname="SelectedValue"/>
      <asp:Parameter DefaultValue="default"  Name="region" Type="String"/>
      <asp:Parameter DefaultValue="default"  Name="u_r" Type="String"/>
      <asp:Parameter DefaultValue="default"  Name="UserGroup" Type="String"/>
</SelectParameters>
</asp:SqlDataSource>
然后,在ddAdminYear的select事件处理程序中,我为tbOneUnit设置了如下数据源:

sdsAdminMunic.ConnectionString = _user.SelectedDBConn
tbOneUnit.DataSourceID = "sdsAdminMunic"
tbOneUnit.DataBind()
ddAdminYear下拉列表将填充,但tbOneUnit下拉列表不会填充

如何使用基于ddAdminYear值的存储过程来填充tbOneUnit下拉列表

编辑: 我无法发布存储过程本身,但下面是标题:

[dbo].[GET_MUNIC_LISTING_VB] (
    @YEAR smallint,
    @REGION as varchar(5) = NULL,
    @U_R as varchar(2) = NULL, 
    @USERGROUP as varchar(10) = NULL)
我可以验证它是否返回数据。 如果还有什么可以帮忙的,请告诉我

编辑2: 存储过程正在运行,但默认值将作为我指定的字符串传递。。。所以,这不是我想做的。 现在,该应用程序将通过以下内容:

exec GET_MUNIC_LISTING_VB @year=N'2017',@region=N'default,N'@u_r=N'default',@UserGroup=N'default'
对于应用程序,我希望它通过:
exec GET_MUNIC_LISTING_VB@year=N'2017'、@region=default、@u_r=default、@UserGroup=default

我会根据两个下拉列表中所有可能的数据组合所需的数据量,采用两种方法之一解决问题

如果ddAdminYear的值数量有限,我将为每个值创建一个tbOneUnit,然后使用一些javascript根据所选值动态显示或隐藏每个下拉列表。您需要创建一个foreach循环和惟一Id或其他标识符,以便识别每个惟一下拉列表

$(document).ready(function() {
    $('#ddAdminYear').change(function() {

        var adminYear = $(this).val();

        $('.tbOneUnit').hide();
        $('#tbOneUnit_' + adminYear).show();

    });
});
如果上面的解决方案有太多的数据,那么另一个解决方案是在每次ddAdminYear更改时创建一个ajax事件,并使用该事件填充tbOneUnit的数据。当然,这需要您在服务器上编写一个方法,该方法将根据ddAdminYear的当前值返回tbOneUnit的正确数据

$(document).ready(function() {
    $('#ddAdminYear').change(function() {

        var adminYear = $(this).val();

        var get = $.ajax('/GetTbData', adminYear);

        get.done(function(data) {
            // take data and add to drop down here
        });

    });
});

根据两个下拉列表中所有可能的数据组合所需的数据量,我将采用两种方法之一来解决这个问题

如果ddAdminYear的值数量有限,我将为每个值创建一个tbOneUnit,然后使用一些javascript根据所选值动态显示或隐藏每个下拉列表。您需要创建一个foreach循环和惟一Id或其他标识符,以便识别每个惟一下拉列表

$(document).ready(function() {
    $('#ddAdminYear').change(function() {

        var adminYear = $(this).val();

        $('.tbOneUnit').hide();
        $('#tbOneUnit_' + adminYear).show();

    });
});
如果上面的解决方案有太多的数据,那么另一个解决方案是在每次ddAdminYear更改时创建一个ajax事件,并使用该事件填充tbOneUnit的数据。当然,这需要您在服务器上编写一个方法,该方法将根据ddAdminYear的当前值返回tbOneUnit的正确数据

$(document).ready(function() {
    $('#ddAdminYear').change(function() {

        var adminYear = $(this).val();

        var get = $.ajax('/GetTbData', adminYear);

        get.done(function(data) {
            // take data and add to drop down here
        });

    });
});

所以,我的问题似乎是,当我想要使用存储过程中定义的默认值时,我正在指定用于执行存储过程的参数

我可以通过注释掉我指定的参数来解决这个问题,只留下ddAdminYear controlParameter。这产生了以下代码:

exec GET_MUNIC_LISTING_VB @year=N'2017'

多亏了所有发表文章并付出努力的人。

所以,我的问题似乎是,当我想使用存储过程中定义的默认值时,我指定了执行存储过程的参数

我可以通过注释掉我指定的参数来解决这个问题,只留下ddAdminYear controlParameter。这产生了以下代码:

exec GET_MUNIC_LISTING_VB @year=N'2017'
感谢所有发帖并付出努力的人。

您能展示GET_MUNIC_LISTING_VB存储过程吗?您能展示GET_MUNIC_LISTING_VB存储过程吗?