2013-03-21 197 views
1

我有兩個下拉列表,第一個有四個選項,用戶選擇並基於此,第二個下拉列表將從選定的數據庫列數據中填充。我試圖來填充這些列表編程,而不是通過數據源綁定他們根據以前的下拉列表選擇填充下拉列表

我目前擁有的代碼有兩個問題:

1.在我的「onselectedIndex改變」的方法,如果我不能引起我的活動我希望單擊下拉列表中的第一個元素,我必須單擊另一個項目,然後重新單擊第一個元素,以便它也觸發。我必須的AutoPostBack設置爲true

2.當事件觸發確實數據庫中的數據不填充第二下拉列表,它是用正確的數據集的正確數量的行填充,但不顯示數據。

一旦第一個元素是從第一個下拉列表,即「咖啡名稱」,那麼第二個列表中填入正確的行號選擇,即3,但不正確的數據

當前代碼:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string option = DropDownList1.SelectedValue; 
     // If the selected element is 'Coffee Name' run the method. 
     if (option == "Coffee Name") 
     { 
      bindCoffeeNames(); 
     } 
    } 



    private void bindCoffeeNames() 
    { 
     Query the DB and bind the data to the second dropdown list. 
     SqlConnection sqlcon = new SqlConnection(connstring); 
     SqlCommand sqlcmd = new SqlCommand("select coffeeName from Coffees ORDER BY coffeeName ASC", sqlcon); 
     SqlDataAdapter adp = new SqlDataAdapter(sqlcmd); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 
     DropDownList2.DataSource = ds.Tables[0]; 
     DropDownList2.DataBind(); 

    } 

回答

0
  1. Autopostback只會觸發更改。你想插入一個默認的佔位符到
    下拉列表。你可以做到這一點在這樣的代碼:

    dropdownlist1.Items.Insert(0, new ListItem("Select an item", String.Empty)); 
    dropdownlist1.SelectedIndex = 0; 
    

    或標記:

    <asp:DropDownList ID="ddlPersons" runat="server" AppendDataBoundItems="true" DataValueField="ID" DataTextField="Name"> 
    <asp:ListItem> -- please select person -- </asp:ListItem> 
    </asp:DropDownList> 
    
  2. 此行添加到bindCoffeeNames:

    DropDownList2.DataTextField = "coffeeName";

而且,指定DataValueField是一個好主意(您必須更改查詢以返回CoffeeId以及但它不是必需的)

+0

非常感謝我工作的佔位符'空白'默認項目。但數據字段完美運行。再次謝謝你。我會盡可能地標記你的答案 – user1352057 2013-03-21 00:45:16

相關問題