2013-07-22 3 views
0

Здесь я пытаюсь заполнить выпадающий список на основе выбранного значения из другого раскрывающегося списка. Вот мой код, как:dropdown_SelectedIndexChanged работает только второй раз

<div> 
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" onselectedindexchanged="DropDownList1_SelectedIndexChanged"> 
    </asp:DropDownList> 

    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true"> 
    </asp:DropDownList> 
</div> 
</form> 

А вот код-за:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     getDeveloperId(); 
    } 
} 


    public void getProjectId() 
     { 
      string projName, projId, projFinal; 
      using (var cmdScope_ID = new SqlCommand("SELECT [ProjectId],[ProjectName] FROM [DB].[dbo].[Sample Table]", con)) 
      { 
       using (var reader = cmdScope_ID.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         projId = reader[0].ToString(); 
         projName = reader[1].ToString(); 
         projFinal = projId + "-" + "[" + projName + "]"; 
         DropDownList1.Items.Insert(0, new ListItem(projFinal, "1")); 
        } 
       } 
      } 
     } 

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //code to get data from DB and populate DropDownList2 
} 

Моя проблема при выборе любого элемента из первого выпадающего списка, ничего не происходит в первый раз. Только перезагрузка страницы. Но если я сделаю это снова, то будет заполнено только второе выпадающее меню.

Кроме того, если я поддерживаю условие if (!IsPostBack), ничего не происходит. Но если я удалю его, первое выпадающее меню будет заполнено дважды, а затем появится только второе выпадающее меню. Любые предложения, почему это происходит?

EDIT: Я добавил код для заполнения первого выпадающего списка. Тот же код для второго выпадающего меню.

+0

Неужели вы пытаетесь отладить и посмотреть, что происходит на странице Load, а также на выбранном событии с измененным индексом? –

+0

yes ... если я не использую '! IspostBack', компилятор снова запускается через getDeveloperId(). Но если я изменил выпадающий список, то только он пришел к selectindexchanged методу – nitinvertigo

+0

, но если я использую Ispostback, он просто заполнит первый выпадающий список один раз, а затем ничего не произойдет – nitinvertigo

ответ

1

Эй проблема в том, что линия DropDownList1.Items.Insert(0, new ListItem(projFinal, "1"));

Поскольку вы добавляете элемент на index "0" со значением 1 и компилятором получает не прилагается selectedchange события выпадающего списка.

Пожалуйста, привяжите элементы по разному индексу со значением, тогда только ваша проблема может быть решена.

У меня есть простая программа для проверки вашей проблемы. посмотрите.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      fill(); 
     } 

    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     List<int> lst = 
     new List<int>(); 
     lst.Add(12); 
     lst.Add(22); 
     lst.Add(32); 
     DropDownList2.DataSource = lst; 
     DropDownList2.DataBind(); 
    } 

    private void fill() 
    { 
     List<int> lst = 
     new List<int>(); 
     lst.Add(1); 
     lst.Add(2); 
     lst.Add(3); 
     var count=0; 
     foreach (var i in lst) 
     { 
      DropDownList1.Items.Insert(count, new ListItem(i.ToString(), count.ToString())); 
      count++; 
     } 


    } 

Надеется, что это будет поможет вам ...

1

Я изменил путь данные привязанный к выпадающему меню. Теперь он работает отлично.

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       getDeveloperId(); 
      } 
     } 
     public void getDeveloperId() 
     { 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter("SELECT [DeveloperId], [DeveloperName] FROM [DB].[dbo].[tbl]", con); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      DropDownList1.DataSource = ds.Tables[0]; //bind the ddp_dataview to dataview 
      DropDownList1.DataTextField = "DeveloperName"; 
      DropDownList1.DataValueField = "DeveloperId"; 
      DropDownList1.DataBind(); 
     } 
Смежные вопросы