2016-12-13 2 views
0

DataBind()でこのエラーが発生しています。何も選択すべきではありません。 ドロップダウンには、選択した項目をクリアしても項目のリストに存在しないため無効な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(); 
は私が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();

次に結合としてリスト項目のプロパティを選択します。

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をスニペットでListに変換するだけではなく、スニペットが機能します。したがって、IEnumerableを機能させるためには、単に "変換する必要がある"とは思われません。 –

+0

自分のプロジェクトでは動作します。だから私は同じことをここで考えていた。たぶん私は間違っています。 –

+0

両方の方法で動作します。これは、IEnumerableを使用する場合に機能し、List <>を使用すると機能します。それで、なぜ私は何かが彼/彼女が上場/列挙しているクラスで間違っていると思う。あなたのスニペットにあるクラスは、提供されたコードにクラスが含まれていないため、私が思いついたクラスです。だから私は1つを作った。 –

関連する問題