所以,我一直在争取这个时间超过我想承认的时间,而且似乎无法找到关于我做错的信息。所以,谦卑地,我提交了这个问题。
我有2个下拉列表和数据源,如下所示:
<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>
页面加载时设置sdsAdminDistinctYr的connectionString。运行的代码如下所示:
sdsAdminDistinctYr.ConnectionString = _user.SelectedDBConn
ddAdminYear.DataSourceID = "sdsAdminDistinctYr"
然后,在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
答案 0 :(得分:1)
我会以两种方式之一来解决问题,具体取决于两个下拉列表的所有可能数据组合需要多少数据。
如果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
});
});
});
答案 1 :(得分:1)
因此,当我想使用存储过程中定义的默认值时,看起来我的问题是我正在指定执行存储过程的参数。
我能够通过注释掉我指定的参数来解决这个问题,只留下ddAdminYear controlParameter。这产生了以下代码RPC:
exec GET_MUNIC_LISTING_VB @year=N'2017'
感谢所有发布并努力的人。