2011-07-05 8 views
1

に常にゼロに等しい、私のアプリ イム私は選択されたインデックスは、私はID、ProgramNameに、短縮名およびコードなどのプロパティで、プログラムのクラスを持っているのASP .NET

<asp:DropDownList ID="DDLProgram" runat="server" 
      OnSelectedIndexChanged ="OnDDLProgramChanged" AutoPostBack = "true"> 
    </asp:DropDownList> 

のようなASP DDLを持っています私のOnDDLProgramChangedメソッドは、

として定義されます。
protected void OnDDLProgramChanged(object sender, EventArgs e) 
     { 
      List<CcProgramEntity> programEntities = GetAllPrograms(); 

      DDLProgram.DataSource = programEntities; 
      DDLProgram.DataTextField = "Shortname"; 
      DDLProgram.DataValueField = "Id"; 

      //My Problem goes here 
      string programCode = programEntities[DDLProgram.SelectedIndex].Code; 
     } 

私のリストは正しくすべてのレコードを取得しています。私はそれをチェックしました。しかし、DDLの項目を変更するたびに、選択したインデックスは変更されません。選択したインデックスはゼロのままです。したがって、0のインデックスのアイテム以外のアイテムのコードを取得できません。

この場合、誰でも助けてくれますか?

+0

page_loadに 'IsPostBack'チェックがありますか? – V4Vendetta

答えて

3

selectedIndex Change eventに再度データをバインドしています。リビルド後に現在のSelectedIndexがリセットされます。あなたはページの読み込み方法のDropDownListコントロールにデータをバインドする必要があり

protected void OnDDLProgramChanged(object sender, EventArgs e) 
    { 

     string programCode = programEntities[DDLProgram.SelectedIndex].Code; 
    } 
+0

ありがとうございました。私のコードを変更しました。今はきれいに見ています。 – Pankouri

3

...それはようにする必要がありSelectedIndex Change Event

であなたのドロップダウンにデータを再バインドする必要はありません

if (!IsPostBack) 
{ 
    DDLProgram.DataSource = programEntities; 
    DDLProgram.DataTextField = "Shortname"; 
    DDLProgram.DataValueField = "Id"; 
    DDLProgram.DataBind(); 
} 

それ以外の場合、毎回データをバインドして選択をクリアします

+0

これは正しいです。 –

+0

@ Eranga:The Solution for Thanxは、私にとって完璧に機能しました。しかし、今私はアイテムを変更しているときに起こっている。ページが初めて読み込まれるようにしたいのですが?私は自分のページに1つ以上のDDLを持っており、DDLs(Bind DDLs)メソッドを使ってそのすべてをバインドしています。 pageloadメソッドのif(!IsPostBack)条件の中で、このM Pankouri

+0

@Pankouri「アイテムを変更しているときにのみ起こっている」とはどういう意味ですか?あなたは 'OnDDLProgramChanged'のドロップダウンリストですか? – Eranga

1

なぜデータソースをOnDDLProgramChangedに割り当てるのですか?これはセレクトをリセットしますあなたが作るイオン。

関連する問題