2013-05-09 16 views
6

ddl2, ddl1 seçilen değere göre başarılı bir şekilde açılır.İçeriği değiştiğinde açılır liste öğesi çıkarılıyor nasıl temizlenir?

Sorunum, ddl2'de zaten mevcut olan veriler yeni verileri eklemeden önce temizlenmiyor, bu nedenle ddl2 içeriği her defasında ddl1 değiştiğinde büyümeye devam ediyor.

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

Ben küçük başarı ile geride seçilen endeks değişimine ve ayrıca items.clear kodda yeniden Veri bağlamada çalıştılar.

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

SORU

Nasıl bir asp mevcut ürün almak için: Yeni değerler doldurulur önce DropDownLists içeriği başka DropDownLists seçilen değer bağımlı olduğunda dropdownlist temizlemek için?

VB herhangi bir kod gönderilmesi için lütfen

cevap

17

aşağıdaki kullanın çalıştı dropdownlist, ancak, dropdown listenizin değil,

olarak ayarlandığından emin olmalısınız.
AppendDataBoundItems="True" 

Bu seçenek, geri alma verilerinin, varolan listeye eklenmeden önce NOT bağlanmadan önce temizlenmesini sağlayacaktır.

ÇÖZÜM

sizin dropdownlist için AppendDataBoundItems="False" ekleyin.

Artık veriler geri döndüğünde, önceden varolan tüm verileri otomatik olarak temizler.

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

NOT:Bu appenddatbound öğeleri açılır listesinden her değişikliği kendi veri eklenecek neden olabilir tüm durumlarda uygun olmayabilir.


ÜST uç

Hala bir varsayılan liste öğesi açılan ekleyerek, ancak veri yeniden bağlamanız gerek istiyorum?

Geri gönderme sırasında çoğaltma verilerini önlemek için ve ardından açılan listenizden sonra doğrudan yeni bir varsayılan liste öğesi ekledikten sonra AppendDataBoundItems="False" kullanın.

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

'e tıklandığında Bu benim seçili değerinizi temizlemesine rağmen, tüm açılan değerlerimi de tekrar kullanılabilir duruma getirmek için temizledi. AppendDataBoundItems üzerinde hem "True" hem de "False" ı denedim. Eminim muhtemelen özlediğim bir şeymişim ama bu olayın ortaya çıkmasını istedim. –

+0

@JohnWaclawski "AppendDataBoundItems =" False "ise, veri listeye her bağlandığında listeyi otomatik olarak temizler. – Obsidian

9
Sen önce bağlama için listbbox temizlemek gerekir

:

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

Yukarıdaki düzenlemelerime bakın. Bunu zaten yapıyorum ama işe yaramıyor. – Obsidian

1

sadece kodu ve ondan eksik tek şey derlenmiş sahip olmasıdır böyle yeniden bağlanma önce boş bir veri kaynağı için ddl2 Bind için:

Protected Sub ddl1_SelectedIndexChanged (ByVal gönderen Nesne, ByVa olarak l EventArgs olarak e) //ddl2.Items.Clear()

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

ve gayet

+0

Cevabınız için minnettarım ancak ne olduğumu bilmiyorum ne yeni = () VB'de. Benim için yeni bir tane. VB örneğini biliyor musun? – Obsidian

+0

Vb.net – Adam

5

temizleyecektir ddl.Items.Clear() kullanma

ddlCity.Items.Clear(); 
+0

'daki Yeni Listeye eşittir (Of String)() Düzenle işte bu harika! Teşekkürler. – SearchForKnowledge

1

Sorununuz tüm

İlk çözmek AppendDataBoundItems özelliğini kontrol etmek ve mülkiyet .Clear()

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
kullanarak sahte

İkincisi açık tüm öğeleri atamak yapmak sadece 2 basit adımı