2011-12-28 50 views
2

DropDownListのSelectedIndexChangedイベントにCheckBoxListを動的に追加する必要があります。私はこれを達成しましたが、ポストバックでその価値を保持することはできません。ここでAsp.Netのポストバックで動的に作成されたコントロールの値を取得する

は、私がこれまで行っているものです:

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    loadTracks();//Needs to generated dynamically 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!Page.IsPostBack) 
    { 
    loadDegrees(); 
    } 
    loadTracks(); 
} 

public void loadTracks() 
{ 
    try 
    { 
     ConfigurationDB objConfig = new ConfigurationDB(); 
     DataSet ds = objConfig.GetTracksByDegreeID(
      Convert.ToInt32(ddlDegree.SelectedValue.ToString())); 
     CheckBoxList CbxList = new CheckBoxList(); 

     CbxList.ID = "Cbx"; 
     for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
     { 
      CbxList.Items.Add(new ListItem(ds.Tables[0].Rows[i]["Track_Name"] 
       .ToString(), ds.Tables[0].Rows[i]["ID"].ToString())); 
     } 
     ph.Controls.Add(CbxList); 
     ViewState["tracks"] = true; 
    } 
    catch(Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 
} 

//For testing, I added a button and on its click I have added this code 

protected void btnDetails_Click(object sender, EventArgs e) 
{ 
    CheckBoxList Cbx = (CheckBoxList)ph.FindControl("chk"); 
    foreach (ListItem ex in Cbx.Items) 
    { 
     if (ex.Selected) 
     { 
      Response.Write(String.Format("You selected: <i>{0}</i> <br>", ex.Value)); 
     } 
    } 
} 

答えて

4

は、タイプミスされる場合があります。

CbxList.ID = "Cbx"; 

v.s.

CheckBoxList Cbx = (CheckBoxList)ph.FindControl("chk"); 
+0

グレートを実行するコードを変更せずに、それを試してみて、事前に使用することができます!チェックボックスリストcbxを設定すると、 – Shah

+0

Andomarが機能しました。私はそれをプレースホルダに追加しないでください。結果は繰り返し追加されます。 私do CbxList.Items.Clear();それから私はまた、それは私がチェックボックスのリストのselecedIndexChangeを必要としています。ハマった。 – Shah

+0

@ user1057735: 'if(!IsCallback &&!IsPostBack)'アイテムだけを追加してください。コメントを追加するのではなく、新しい質問をしてください。 SOのすべてが答えるチャンスを得ます! – Andomar

0

あなたはPreRender がちょうどあなたloadTracks()

関連する問題