2013-05-09 1 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

다음 사용하시기 바랍니다 일

,369 : 드롭 다운리스트 그러나 당신은 당신의 드롭 다운리스트가 하지 세트에 있는지 확인해야합니다
AppendDataBoundItems="True" 

이 옵션은 리바운드 데이터가 바인딩하기 전에 삭제하지됩니다 기존 목록에 추가하게됩니다.

솔루션

당신의 드롭 다운리스트에 AppendDataBoundItems="False"를 추가합니다. 데이터가있는 경우

이제 자동으로 지워 기존의 모든 데이터를 사전에 반등.

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

참고 :이것은 appenddatbound 아이템이 드롭 다운 목록의 각 변경에 자신의 데이터를 추가 발생할 수있는 모든 상황에 적합하지 않을 수 있습니다.


은 TOP의 팁

아직도 기본 목록 항목이 드롭 다운에 추가하지만, 데이터를 리 바인드해야합니다?

사용 AppendDataBoundItems="False"은 DropDownList로 새로운 기본 목록의 항목을 삽입 결합 후 바로 다음 포스트 백에 중복 데이터를 방지합니다.

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

이것은 내가 선택한 값을 지우지 만 다시 사용할 수 없도록 모든 드롭 다운 값을 지 웠습니다. AppendDataBoundItems에서 "True"와 "False"를 모두 시도했습니다. 아마 내가 놓친 것 같지만이 경우를 대비해서 버리고 싶었을 것입니다. –

+0

@JohnWaclawski 데이터가 목록에 바인딩 될 때마다 AppendDataBoundItems는 = "거짓"'후 자동으로 미리 목록을 삭제합니다'경우. – Obsidian

9
당신은 이전에 바인딩에 listbbox을 취소해야

:

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

위의 수정 사항을 참조하십시오. 나는 이미 이것을하고 있지만 효과가 없습니다. – Obsidian

1

은 당신의 코드와 그것에서 누락 된 유일한 컴파일 당신이 가지고있다 다음과 같이 다시 결합하기 전에 빈 데이터 소스에 ddl2를 바인딩 :

보호 하위 ddl1_SelectedIndexChanged (ByVal의 보낸 사람을 개체 ByVa으로 L 있는 EventArgs으로 전자) //ddl2.Items.Clear()

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

그것은 잘

+0

정말 그러나 나는 새로운 목록 을 (= 무슨 생각) VB에이없는 당신의 응답을 주셔서 감사합니다. 그것의 새로운 하나. VB 예제를 알고 있습니까? – Obsidian

+0

이 큰 일을 Vb.net – Adam

5

하여 삭제됩니다 ddl.Items.Clear()를 사용

ddlCity.Items.Clear(); 
+0

에서 (문자열) 새로운 목록()과의 동일 편집을 참조! 감사. Upvoted – SearchForKnowledge

1

문제 모두의

먼저 해결 AppendDataBoundItems 속성을 확인하고 등록하는 명확한()

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
를 사용하여 거짓

둘째 분명 모든 항목을 지정할 수 있도록 그냥이 간단한 단계를