2016-12-13 28 views
0

我在DataBind()上收到此錯誤,但我不知道爲什麼不應該有任何選擇。Dropdown有一個無效的SelectedValue,因爲它不存在於項目列表中,即使我清除了選定的項目(C#)

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(); 

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.SelectedIndex = 0的的DataBind()之前,但後來我所選擇的指數是不存在的錯誤。這是怎麼回事?

+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();

然後選擇列表項的屬性具有約束力。

OR

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 <>時工作。因此,爲什麼我認爲他/她列舉/列舉的課程中有什麼錯誤。您的代碼片段中包含的課程是我提出的課程,因爲他/她提供的代碼不包含課程。所以我做了一個。 –

相關問題