2015-03-13 110 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