2010-01-25 4 views
2

DropDownList 컨트롤을 사용하여 테이블에서 검색된 데이터를 표시하는 ASP.Net 양식이 있습니다. 그러나 DropDownList의 SelectedValue를 드롭 다운 목록에없는 값으로 설정해도 예외가 트리거되지 않습니다.ASP.NET 설정 SelectedValue 목록에 속하지 않는 예외를 트리거하지 않습니다.

Try 
    dropDownList.SelectedValue = value 
Catch ex as Exception 
    Throw 
End Try 

위의 코드에서 목록의 항목에 속하지 않는 값을 할당하면 예외가 발생하지 않습니다. HTML이 렌더링 될 때 목록에서 첫 번째 항목을 선택하기 만합니다.

왜 그런가?

그건 그렇고, 나는 빈 (String.Empty) 항목을 목록의 첫 번째 항목으로 있습니다. 또한 DataBind()를 사용하여 listItem을 DataTable에 바인딩했습니다. 그게 어떤 차이가 있습니까?

+0

의도적으로 설계된 것 같습니다. 예외를 throw하려는 특별한 이유가 있습니까? – hunter

+0

데이터베이스에서로드 된 데이터가 사용 가능한 답변에 속하지 않으며 사용자가 변경해야한다는 사실을 사용자에게 알려야합니다. 나는 사용자의 답변을 위해 데이터베이스를 유지하지 않지만 드롭 다운에 대한 선택 목록을 유지합니다 – Devmonster

답변

7

고마워 응답을 위해. 내가 궁극적으로 한이 드롭 다운리스트의 FindByValue() 메소드를 사용하고 값이 목록에 존재하는지 확인되었다 전달 된 매개 변수 목록에 속하지 않는 경우

If Not DropDownlist.Items.FindByValue(value) Is Nothing Then 
    ' do what the Exception is supposed to do ' 
Else 
    DropDownList.SelectedValue = value 
End If 

FindByValue()는 아무 것도 반환하지 않습니다. 문제를 잡아내는 방법으로 예외 처리 (처리에 많은 부담을주기)를 사용하지 않고 필요한만큼 정확하게 작동합니다.

4

선택한 값은 사용 가능한 값 의 목록에없는과 포스트 백은 ArgumentOutOfRangeException이 가 발생합니다,을 수행하는 경우 :

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx

+0

고마워요. 하지만 데이터베이스에서 가져온 데이터가 초기 페이지로드 목록에 속하는지 확인해야합니다. – Devmonster

+0

죄송합니다. 왜 예외가 발생하지 않는지에 대한 답변이었습니다. 귀하의 솔루션에 대한 드롭 다운리스트의 Items propery, 어쩌면 Contains 메서드를 사용하여 확인해야 할거야. Me.ComboBox1.Items.Contains() –

+0

Items 속성에 항목이 있는지 확인하기 위해 코드를 다시 작성했습니다. Me.Dropdown.Items.FindByValue()는 어때? 너는 그것을 추천하니? – Devmonster

-1

나는 NOT을 제거해야한다고 생각합니다. 그렇지 않으면 그 반대입니다. 이것이 내가 한 일이다.

If ddAssignedDTL.Items.FindByValue(sqlreader("C_AssignedDTL").ToString) Is Nothing Then 

' do what the Exception is supposed to do ' 
ddAssignedDTL.Items.Add(New ListItem("<Invalid DTL-" & sqlreader("C_AssignedDTL").ToString & ">", sqlreader("C_AssignedDTL").ToString)) 
ddAssignedDTL.SelectedValue = sqlreader("C_AssignedDTL").ToString 
DTL = sqlreader("C_AssignedDTL").ToString 
ddAssignedDTL.BackColor = Drawing.Color.Red 
Else 
ddAssignedDTL.SelectedValue = sqlreader("C_AssignedDTL").ToString 
DTL = sqlreader("C_AssignedDTL").ToString() 
End If 
관련 문제