2015-09-17 273 views
0

我想创建第二个下拉列表,该列表基于第一个下拉列表的值根据需要调整列表项目。我写了下面的代码,但即使没有编译错误,第二个下拉列表仍然是空的。以下是html和C#代码。基于另一个下拉列表的值的下拉列表项目

<table> 
 
     
 
     <tr><td>System</td> 
 
      <td> 
 
       <asp:DropDownList ID="systemddl" runat="server" AutoPostBack="True" Height="24px" Width="142px"> 
 
    <asp:ListItem>G1</asp:ListItem> 
 
    <asp:ListItem>D2</asp:ListItem> 
 
    <asp:ListItem> D3</asp:Listitem> 
 
    <asp:ListItem> M4</asp:Listitem> 
 
    <asp:ListItem> I5</asp:Listitem> 
 

 
        </asp:DropDownList></td> 
 

 
     </tr> 
 
     <tr> 
 
      <td>KPI</td> 
 
      <td> <asp:DropDownList ID="kpiddl" runat="server" AutoPostBack="True" Height="24px" Width="142px"></asp:DropDownList></td> 
 
     </tr> 
 
     </table>

protected void systemddl_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (systemddl.SelectedValue == "G1") 
    { 
     var items1 = new List<ListItem>() 
     { 
      new ListItem("TEST1"), 
      new ListItem("") 

     }; 
     kpiddl.DataSource = items1; 
     kpiddl.DataBind(); 
     kpiddl.SelectedValue = ""; 
     if (systemddl.SelectedValue == "D2") 
     { 
      var items2 = new List<ListItem>() 
     { 
      new ListItem("1"), 
      new ListItem("2"), 
      new ListItem("3"), 
      new ListItem("4") 
     }; 
      kpiddl.DataSource = items2; 
      kpiddl.DataBind(); 
     } 
     if (systemddl.SelectedValue == "I5") 
     { 
      var items3 = new List<ListItem>() 
     { 
      new ListItem("Total"), 
      new ListItem("V Completed"), 
      new ListItem("R found"), 
      new ListItem("R sold"), 
      new ListItem("A found"), 
      new ListItem("Asold"), 
      new ListItem("") 

     }; 
      kpiddl.DataSource = items3; 
      kpiddl.DataBind(); 
      kpiddl.SelectedValue = ""; 
     } 
     if (systemddl.SelectedValue == "D3") 
     { 
      var items4 = new List<ListItem>() 
     { 
      new ListItem("FRFT"), 
      new ListItem("") 

     }; 
      kpiddl.DataSource = items4; 
      kpiddl.DataBind(); 
     } 
     if (systemddl.SelectedValue == "M4") 
     { 
      var items5 = new List<ListItem>() 
     { 
      new ListItem("A"), 
      new ListItem("B"), 
      new ListItem("C"), 
      new ListItem("D"), 
      new ListItem("") 
     }; 
      kpiddl.DataSource = items5; 
      kpiddl.DataBind(); 
      kpiddl.SelectedValue = ""; 
     } 

回答

1

变化类似这样的标记

<asp:DropDownList 
    ID="ddl_1" 
    runat="server" 
    AutoPostBack="true" 
    OnSelectedIndexChanged="ddl_1_SelectedIndexChanged"> 
</asp:DropDownList> 
<asp:DropDownList 
    ID="ddl_2" 
    runat="server"> 


和第一滴的SelectedIndexChanged添加处理程序下来这样

protected void ddl_1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    switch (this.ddl_1.SelectedValue) 
    { 
     case "A": 
      this.ddl_2.DataSource = source1; 
      break; 
     case "B": 
      this.ddl_2.DataSource = source2; 
      break; 
     default: 
      break; 
    } 

    this.ddl_2.DataBind(); 
} 

使用源初始化第二个下拉菜单,该第二个下拉菜单取决于当前第一个下拉列表的所选值。
因此,当用户更改第一个下拉选择值 - 回发发生,第二个下拉填充所需的值

+0

谢谢。我完全忘记了“OnSelectedIndexChanged =”ddl_1_SelectedIndexChanged“,我会让你知道它是否有效 – el94

+0

不用理睬”AutoPostBack“属性 –

+0

谢谢你的工作。 – el94

相关问题