2013-05-09 158 views
6

ddl2基於ddl1選定的值成功填充。如何在內容更改時清除存在的下拉列表項目?

我的問題是,ddl2中已經存在的數據在追加新數據之前並未清除,因此每次ddl1更改時ddl2內容都會持續增長。

<asp:DropDownList ID="ddl1" RunAt="Server" DataSourceID="sql1" DataValueField="ID1" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True"> 
    <asp:ListItem Text="ALL" Selected="True" Value="0"/> 
</asp:DropDownList> 

<asp:DropDownList ID="ddl2" RunAt="Server" DataSourceID="sql2" DataValueField="ID2" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True"> 
    <asp:ListItem Text="ALL" Selected="True" Value="0"/> 
</asp:DropDownList> 

<asp:SqlDataSource ID="sql1" RunAt="Server" SelectCommand="sp1" SelectCommandType="StoredProcedure"/> 

<asp:SqlDataSource ID="sql2" RunAt="Server" SelectCommand="sp2" SelectCommandType="StoredProcedure"> 
    <SelectParameters> 
    <asp:ControlParameter Type="Int32" Name="ID1" ControlID="ddl1" PropertyName="SelectedValue"/> 
    </SelectParameters> 
</asp:SqlDataSource> 

我已經在代碼試圖重新綁定落後於選擇指數的變化,也items.clear收效甚微。

Protected Sub ddl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
    ddl2.Items.Clear() 
    ddl2.DataSource = sql2 
    ddl2.DataBind() 
End Sub 

問題

如何獲得在ASP中的商品:下拉列表來清除被填充新的值之前當dropdownlists內容依賴於另一個dropdownlists選擇的價值?

請VB張貼任何代碼

回答

17

使用ddl.Items.Clear()將清除dropdownlist但是你必須確保你的下拉列表是不是設置爲:

AppendDataBoundItems="True" 

此選項將導致反彈數據被追加到現有列表中,這將在綁定之前清除NOT

SOLUTION

添加AppendDataBoundItems="False"你的下拉列表。

現在,當數據被反彈時,它會自動清除所有現有的數據。

Protected Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs) 
    ddl2.DataSource = sql2 
    ddl2.DataBind() 
End Sub 

注:這可能不適合於所有情況的appenddatbound項目可能會導致下拉追加在列表中的每個改變自己的數據。


重要提示

還是需要有一個默認列表項添加到您的下拉列表,但需要重新綁定數據?

使用AppendDataBoundItems="False"可以防止在回發時發生重複數據,然後在綁定後直接插入一個新的默認列表項。

ddl.Items.Insert(0, New ListItem("Select ...", "")) 
+0

雖然這清除了我選定的值,但它也清除了我所有的下拉值,使它們不再可用。我在AppendDataBoundItems上嘗試了「True」和「False」。我相信這可能是我錯過的一件事,但爲了以防萬一,我想把它扔到那裏。 – 2015-09-18 19:52:36

+0

@JohnWaclawski如果AppendDataBoundItems =「False」,那麼無論何時數據綁定到列表,它都會自動清除列表。 – Obsidian 2015-09-21 07:30:16

9

你應該結合之前清除您listbbox:

Me.ddl2.Items.Clear() 
    ' now set datasource and bind 
+0

查看我上面的編輯。我已經這樣做了,但它不起作用。 – Obsidian 2013-05-09 12:11:24

1

剛剛編譯你的代碼,並且從它唯一缺少的就是你綁定您的ddl2到一個空的數據源,然後再綁定它,像這樣:

受保護的子ddl1_SelectedIndexChanged(ByVal sender As Object,ByVa升 Ë作爲EventArgs的) //ddl2.Items.Clear()

ddl2.DataSource=New List(Of String)() 
ddl2.DataSource = sql2 
ddl2.DataBind() End Sub 

和它的工作只是罰款

+0

我真的很感謝你的迴應,但我不知道什麼=新列表()是在VB中。它對我來說是一個新的。你知道一個VB示例嗎? – Obsidian 2013-05-09 15:11:26

+0

請參閱編輯其等於新列表(字符串)()在Vb.net – Adam 2013-05-09 16:09:02

5

請使用下面的

ddlCity.Items.Clear(); 
+0

這工作得很好!謝謝。 Upvoted – SearchForKnowledge 2014-05-15 13:27:47

1

只需2個簡單的步驟來解決您的問題

首先檢查的財產AppendDataBoundItems,使其使用屬性.clear()

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
分配假

其次明確所有項目

相關問題