2016-12-13 13 views
0

DataBind()에서이 오류가 발생하며 그 이유를 알 수 없습니다. 아무것도 선택해서는 안됩니다. Dropdown에는 선택한 항목 (C#)을 지웠을지라도 항목 목록에 존재하지 않기 때문에 유효하지 않은 SelectedValue가 있습니다.


private IEnumerable<IStateItem> UsStates 
{ 
    get 
    { 
     var statesFolder = _sitecoreService.GetItem<ISitecoreItem>(ItemReference.BcsUs_ProductData_States.Guid); 
     if (statesFolder == null) 
      return new List<IStateItem>(); 

     List<IStateItem> usStates = _sitecoreService.QueryChildren<IStateItem>(statesFolder).OrderBy(s => s.Title).ToList(); 
     return usStates; 
    } 
} 

DdState.Items.Clear(); 
DdState.DataSource = UsStates; 
DdState.DataTextField = "Title"; 
DdState.DataValueField = "Title";   
DdState.Items.Insert(0, String.Empty); 
if (DdState.SelectedItem != null) 
{ 
    DdState.SelectedItem.Selected = false; 
} 
DdState.DataBind(); 
은 내가 데이터 바인딩() 전에 DdState.SelectedIndex = 0에서 퍼팅 시도,하지만 내가 선택한 인덱스가 존재하지 않는 있다는 오류가 발생했습니다. 무슨 일이야?

+0

하고있는 DropDownList에 데이터를 바인딩? – VDWWD

답변

0

IStateItem 클래스에 문제가있을 수 있습니까? 코드를 복사하여 새 asp.net 응용 프로그램에 붙여 넣기 만하면 IStateItem 클래스가 만들어져 작동합니다.

using System; 
using System.Collections.Generic; 

namespace TestIt 
{ 
    public partial class Form1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      FillTheList(); 
     } 

     private void FillTheList() 
     { 
      ddl_TheList.Items.Clear(); 
      ddl_TheList.DataSource = UsStates; 
      ddl_TheList.DataTextField = "statename"; 
      ddl_TheList.DataValueField = "stateStatus"; 
      //ddl_TheList.Items.Insert(0, String.Empty); 
      ddl_TheList.DataBind(); 
      ddl_TheList.SelectedIndex = 0; 
     } 

     private IEnumerable<IStateItem> UsStates 
     { 
      get 
      { 
       List<IStateItem> usStates = new List<IStateItem>(); 
       for (int i = 0; i < 10; i++) 
       { 
        usStates.Add(new IStateItem { statename = "state #" + i, stateStatus = "cool state bro" }); 
       } 
       return usStates; 
      } 
     } 
    } 

    public class IStateItem 
    { 
     public string statename { get; set; } 
     public string stateStatus { get; set; } 
    } 


} 
1

데이터 원본이 훨씬 구현하기가 쉬운 목록 인 경우. 따라서 UsStates IEnumerable을 List로 "변환"한 다음 데이터 소스에 추가하십시오.

DdState.DataSource = UsStates.ToList();

그런 다음 구속력 목록 항목의 속성을 선택합니다.

또는

public Form1() 
    { 

     InitializeComponent(); 

     DdState.Items.Clear(); 
     DdState.DataSource = UsStates; 
     DdState.DisplayMember = "Statename"; 
     DdState.SelectedIndex = 0; 
    } 

    private List<IStateItem> UsStates 
    { 
     get 
     { 

      List<IStateItem> usStates = new List<IStateItem>(); 

      usStates.Add(new IStateItem("California","status1")); 
      usStates.Add(new IStateItem("Ohio", "status3")); 
      return usStates; 
     } 
    } 

    private class IStateItem 
    { 
     public IStateItem(string statename, string stateStatus) 
     { 
      Statename = statename; 
      StateStatus = stateStatus; 
     } 
     public string Statename { get; set; } 
     public string StateStatus { get; set; } 
    } 
+0

나는 IEnumerable을 내 스 니펫에있는 목록으로 "변환하는 것"이 ​​아니라 내 스 니펫이 작동합니다. 따라서 IEnumerable을 "변환하기 만하면됩니다"라고 생각하지 않을 것입니다. –

+0

제 자신의 프로젝트에서 작동합니다. 그래서 나는 그것과 같은 것을 여기에서 생각했다. 어쩌면 내가 틀렸어. –

+0

그것은 두 가지 방법으로 작동합니다. IEnumerable을 사용하면 작동하며 List <>를 사용하면 작동합니다. 그러므로 내가 왜/그녀가 열거/열거하고있는 수업에서 뭔가 잘못되었다고 생각합니다. 스 니펫에있는 클래스는 내가 제공 한 코드에 클래스가 들어 있지 않아서 생겨났습니다. 그래서 하나 만들었 어. –