如何从代码隐藏更新 DropDownList 的 SQLDataSource
How to update the SQLDataSource of a DropDownList from code-behind
我有两个下拉列表:
<td style="width: 20%;">
<!-- TASK NAME -->
<asp:DropDownList ID="ddlTaskName" DataSourceID="dsPopulateTaskName" AutoPostBack="true" DataValueField="Task Name" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlTaskName_onSelectIndexChanged">
<asp:ListItem Text="All" Value="%"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="dsPopulateTaskName" runat="server" ConnectionString="<%$ ConnectionStrings:gc %>" SelectCommand=""></asp:SqlDataSource>
</td>
<td style="width: 20%;">
<!-- SERVICE -->
<asp:DropDownList ID="ddlService" DataSourceID="dsPopulateService" AutoPostBack="true" DataValueField="Service" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlService_onSelectIndexChanged">
<asp:ListItem Text="All" Value="%"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="dsPopulateService" runat="server" ConnectionString="<%$ ConnectionStrings:gc %>" SelectCommand=""></asp:SqlDataSource>
</td>
Page_Load
上的代码隐藏:
strForDropDownList = @" FROM [Db].[dbo].[table1] WHERE [stat] = 'A'";
string pol = " AND ";
if (ddlTaskName.SelectedIndex == 0)
{
pol += " ([tcol] LIKE '%' OR [tcol] IS NULL) AND ";
}
else
{
pol += " [tcol] = '" + ddlTaskName.SelectedValue.TrimEnd() + "' AND ";
}
if (ddlService.SelectedIndex == 0)
{
pol += " (scol LIKE '%' OR scol IS NULL) AND ";
}
else
{
pol += " scol = '" + ddlService.SelectedValue.TrimEnd() + "' AND ";
}
strWhere = pol;
dsPopulateTaskName.SelectCommand = @"SELECT DISTINCT [tcol] 'Task Name'" + strForDropDownList + strWhere;
dsPopulateService.SelectCommand = @"SELECT DISTINCT scol 'Service'" + strForDropDownList + strWhere;
当页面加载时,一切都以 %
开头并正确填充下拉列表。如果我 select 来自 ddlService
下拉列表的选项,dsPopulateTaskName.SelectCommand
会显示正确的查询以重新填充 ddlTaskName
下拉列表,但不会更新它。
请帮我解决一下
你应该在设置 SelectCommand
后调用 ddlService.DataBind()
和 ddlTaskName.DataBind()
,我的意思是如下:
dsPopulateTaskName.SelectCommand =
@"SELECT DISTINCT [tcol] 'Task Name'" + strForDropDownList + strWhere;
ddlService.DataBind();
dsPopulateService.SelectCommand =
@"SELECT DISTINCT scol 'Service'" + strForDropDownList + strWhere;
ddlTaskName.DataBind();
希望对您有所帮助
我有两个下拉列表:
<td style="width: 20%;">
<!-- TASK NAME -->
<asp:DropDownList ID="ddlTaskName" DataSourceID="dsPopulateTaskName" AutoPostBack="true" DataValueField="Task Name" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlTaskName_onSelectIndexChanged">
<asp:ListItem Text="All" Value="%"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="dsPopulateTaskName" runat="server" ConnectionString="<%$ ConnectionStrings:gc %>" SelectCommand=""></asp:SqlDataSource>
</td>
<td style="width: 20%;">
<!-- SERVICE -->
<asp:DropDownList ID="ddlService" DataSourceID="dsPopulateService" AutoPostBack="true" DataValueField="Service" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlService_onSelectIndexChanged">
<asp:ListItem Text="All" Value="%"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="dsPopulateService" runat="server" ConnectionString="<%$ ConnectionStrings:gc %>" SelectCommand=""></asp:SqlDataSource>
</td>
Page_Load
上的代码隐藏:
strForDropDownList = @" FROM [Db].[dbo].[table1] WHERE [stat] = 'A'";
string pol = " AND ";
if (ddlTaskName.SelectedIndex == 0)
{
pol += " ([tcol] LIKE '%' OR [tcol] IS NULL) AND ";
}
else
{
pol += " [tcol] = '" + ddlTaskName.SelectedValue.TrimEnd() + "' AND ";
}
if (ddlService.SelectedIndex == 0)
{
pol += " (scol LIKE '%' OR scol IS NULL) AND ";
}
else
{
pol += " scol = '" + ddlService.SelectedValue.TrimEnd() + "' AND ";
}
strWhere = pol;
dsPopulateTaskName.SelectCommand = @"SELECT DISTINCT [tcol] 'Task Name'" + strForDropDownList + strWhere;
dsPopulateService.SelectCommand = @"SELECT DISTINCT scol 'Service'" + strForDropDownList + strWhere;
当页面加载时,一切都以 %
开头并正确填充下拉列表。如果我 select 来自 ddlService
下拉列表的选项,dsPopulateTaskName.SelectCommand
会显示正确的查询以重新填充 ddlTaskName
下拉列表,但不会更新它。
请帮我解决一下
你应该在设置 SelectCommand
后调用 ddlService.DataBind()
和 ddlTaskName.DataBind()
,我的意思是如下:
dsPopulateTaskName.SelectCommand =
@"SELECT DISTINCT [tcol] 'Task Name'" + strForDropDownList + strWhere;
ddlService.DataBind();
dsPopulateService.SelectCommand =
@"SELECT DISTINCT scol 'Service'" + strForDropDownList + strWhere;
ddlTaskName.DataBind();
希望对您有所帮助