2015-03-13 108 views
1

一个DropDownList的SqlDataSource的我有两个dropdownlists:如何更新从代码隐藏

<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; 

页面加载时,一切都与%开始,正确填充下拉列表。如果我选择从下拉列表ddlService一个选项,dsPopulateTaskName.SelectCommand显示正确的查询重新填充ddlTaskName下拉列表,但它并没有更新。

请帮我解决这个问题。

回答

1

你应该设置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(); 

希望它有助于

+1

谢谢。我有这样的:'ddlTask​​Name.Items.Clear(); ddlTask​​Name.DataBind();'它工作正常,除了我失去了'应该始终存在的所有'。 – SearchForKnowledge 2015-03-13 14:55:16

+0

你不必使用该行:ddlTask​​Name.Items.Clear();它会刷新数据绑定 – 2015-03-13 15:02:14

+0

我试过了,它没有工作。让我再尝试一次。 – SearchForKnowledge 2015-03-13 15:05:56