2013-02-18 2 views
0

그래서 내가이가 읽을 수있는 모든 것을에서이 오류데이터 바인딩은 인덱스가

{"'drpButton1' has a SelectedValue which is invalid because it does not exist in the list of items.\r\nParameter name: value"} 

을 얻고 선택하지 않은 경우에도 예외가 발생하기 때문에 DropDownList로하거나 기존 항목을했다거나 선택된 인덱스 값이 있던 새로운 데이터 바인딩 된 항목에 없습니다.

하지만 개체에 기존 항목이 없다는 것을 보증 할 수 있으며 범위를 벗어날 수있는 인덱스가 선택되지 않았다고 확신 할 수 있습니다.

다음은 .Databind() 호출 바로 전에 DropDownList 개체가 어떻게 생겼는지입니다.

DropDownlList object before the databind() call

여기 직접 모든 폭발을 초래 한 데이터 바인딩() 호출 이후. enter image description here

내 목록 개체는 7 개의 항목을 포함하며 특히 databind 메서드가 임의로 선택하는 항목을 포함합니다.

하지만 여기 키커가 있습니다. 정확히 같은 데이터가있는 8 개의 드롭 다운을 채우고 첫 번째 드롭 다운에서 올바르게 작동합니다. 왜 두 번째 폭발하는지 모르겠다.

편집 :

여기

부하 방법에서 미리보기입니다 : 여기에 바인딩을 수행하는 코드입니다. 첫 번째 호출이 성공하면 두 번째 호출은 실패하지만 항상 실패하지는 않습니다.

 private void LoadShortCodeDropDownData() 
     { 
      // Initilization junk to get the resultList to use. 

    base.LoadListDropDown(drpButton0, (IList)resultList, "DeviceShortCodeIndexID", "DeviceShortCodeName", select); 
       MessageTextEnabled(drpButton0); 

       base.LoadListDropDown(drpButton1, (IList)resultList, "DeviceShortCodeIndexID", "DeviceShortCodeName", select); 
       MessageTextEnabled(drpButton1); 
} 

    protected void LoadListDropDown(DropDownList dropDown, IList list, string valueField, string textField, string insertItem) 
    { 
     LoadListDropDown(dropDown, list, valueField, textField); 
     //dropDown.Items.Insert(0, new ListItem(insertItem, "")); 
    } 

protected void LoadListDropDown(DropDownList dropDown, IList list, string valueField, string textField) 
     { 
      dropDown.DataSource = list; 
      dropDown.DataValueField = valueField; 
      dropDown.DataTextField = textField; 
      dropDown.DataBind(); 
     } 

EDIT2 : 난 내가 여기가 진짜 문제는 어떻게 데이터 바인딩 따기있는 항목을 선택하는 것입니다 생각? 데이터를 가져 오는 첫 번째 드롭 다운 목록에서 첫 번째 값을 임의로 선택하는 동안 두 번째 목록에 어떤 마지막 이유로 바인딩 할 시도하는 것으로 나타났습니다.

+0

실제 코드를 게시 할 수 있습니까? –

+0

'.DataBind()'를 수행하는 코드를 추가 할 수 있습니까? –

+0

'dropDown.SelectedValue = null;을 설정하려고합니다. 데이터 소스 값을 할당하기 전에 dropDown.Items.Clear(); 자세한 내용을 확인하십시오 - https://connect.microsoft.com/VisualStudio/feedback/details/666808/asp-net-dropdownlist-selectedvalue-is-persisted-which-results-in-exception-if-the-control- is-databound-second-time –

답변

0

페이지의 첫 번째로드시 또는 포스트 백 이후에 이러한 현상이 발생합니까? 다시 게시판 일 경우 기본적으로 SelectedIndex == 0을 가질 수 있습니다.

나는이 문제를 해결할 수 있다고 보장 할 수 없습니다,하지만 당신은 두 번째 LoadListDropDown 과부하의 상단에 ...

dropDown.SelectedIndex = -1; 

추가 시도 할 수 있습니다.

+0

이것은 작동하지만 나중에 값을 지정하는 것을 거부합니다. 오류가 없으면 올바른 것이 할당되지 않습니다. 인덱스가 할당되지 않았기 때문에 이것이 어떻게 수정되는지 전혀 모르겠다. –

0

나는 이것을 전에 실행했고 나는 여러 드롭 다운에 같은 목록을 바인딩 할 수 있다고 생각하지 않는다.

+1

정확히 동일한 ListItem 개체를 여러 개의 드롭 다운에서 공유 할 수는 없지만 DataBind를 수행하면 매번 새 ListItem 개체를 만들어야합니다. 동일한 데이터에 여러 개의 드롭 다운을 바인딩해도 문제가되지 않습니다. –

관련 문제