2012-09-21 20 views
7

Mam listę rozwijaną w asp.net Kiedy klikam na opcję, powinienem otrzymać wybraną wartość, a następnie przekazać ją do bazy danych, a później użyć wyników kwerendy do wypełnienia druga lista rozwijana.Wybierz opcję Zmień listę rozwijaną C# ASP.NET Fire Event

Wydaje mi się, że nie mogę "wystrzelić" tego wydarzenia, gdy kliknę w pierwsze menu rozwijane. Poniżej jest to, co mam:

Kod ASPX

<td class="style3"> 
       <asp:DropDownList ID="Currencies" runat="server" 
        onselectedindexchanged="Currencies_SelectedIndexChanged"> 
       </asp:DropDownList> 
      </td> 
      <td> 
       &nbsp;</td> 
     </tr> 
     <tr> 
      <td class="style2"> 
       Payment Mode</td> 
      <td class="style3"> 
       <asp:DropDownList ID="PaymentModes" runat="server"> 
       </asp:DropDownList> 
      </td> 

kod kodzie C#

String conn = WebConfigurationManager.ConnectionStrings["pvconn"].ToString(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     populatecurrencylist(); 

    } 

    public void populatecurrencylist() 
    { 
     SqlCommand sql = new SqlCommand("SELECT * FROM CURRENCIES_TBL ORDER BY Currency_Initials",new SqlConnection(conn)); 
     sql.Connection.Open(); 
     SqlDataReader listcurrencies; 
     listcurrencies = sql.ExecuteReader(); 
     Currencies.DataSource = listcurrencies; 
     Currencies.DataTextField = "Currency_Initials"; 
     Currencies.DataValueField = "Currency_Group_ID"; 
     Currencies.DataBind(); 
     sql.Connection.Close(); 
     sql.Connection.Dispose(); 
    } 

    protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 
    protected void Currencies_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var currid = Currencies.SelectedValue; 
     HttpContext.Current.Response.Write(currid); 
     //int currid = 0; 
     try 
     { 
      SqlCommand sql = new SqlCommand("SELECT * FROM PAYMENT_MODES_TBL WHERE Currency_ID = @currencyid", new SqlConnection(conn)); 
      SqlParameter param0 = new SqlParameter(); 
      param0.ParameterName = "@currencyid"; 
      param0.SqlDbType = System.Data.SqlDbType.Int; 
      param0.Value = currid; 

      sql.Parameters.Add(param0); 
      sql.Connection.Open(); 
      SqlDataReader listpaymodes; 
      listpaymodes = sql.ExecuteReader(); 
      PaymentModes.DataSource = listpaymodes; 
      PaymentModes.DataTextField = "Payment_Mode"; 
      PaymentModes.DataValueField = "Paying_Account_Code"; 
      PaymentModes.DataBind(); 
      sql.Connection.Close(); 
      sql.Connection.Dispose(); 
     } 
     catch(Exception s) 
     { 
      HttpContext.Current.Response.Write("Error Occured " + s.Message); 
     }    
    } 

mogę wypełnić pierwszy dropdownlist bez problemu. Drugi wydaje się nie działać. Bardzo nowy w ASP.NET. Pochodzę z tła PHP, gdzie byłoby to łatwo osiągnąć przy użyciu ajax jquery, ale chcę się uczyć C#.

Każda pomoc doceniona.

EDIT

Wszystkie odpowiedzi sugerują, że robię walut rozwijaną listę do AutoPostBack = true mam zrobić, że:

<asp:DropDownList ID="Currencies" runat="server" AutoPostBack="True" 
        onselectedindexchanged="Currencies_SelectedIndexChanged"> 
       </asp:DropDownList> 

Ale to wciąż wydaje się nie działać. Na marginesie strona ładuje się ponownie, a moja opcja menu wyboru zostaje zresetowana do pierwszej opcji.

+0

Dodaj właściwość AutoPostBack do wartości true. –

+0

Zaktualizowałem moją odpowiedź. –

Odpowiedz

10

Zmień

<asp:DropDownList ID="Currencies" runat="server" 
        onselectedindexchanged="Currencies_SelectedIndexChanged"> 
       </asp:DropDownList> 

Aby

<asp:DropDownList ID="Currencies" runat="server" AutoPostBack="True" 
        onselectedindexchanged="Currencies_SelectedIndexChanged"> 
       </asp:DropDownList> 

UPDATE

Aktualizacja na pytanie, po aktualizacji.

Zmień to:

protected void Page_Load(object sender, EventArgs e) 
    { 
     populatecurrencylist(); 

    } 

do tego:

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

    } 
2

Bądź Waluty DropDown AutoPostBack prawda.

2

Domyślnie właściwość AutoPostBack z DropDownList ma wartość false.

true, jeśli odświeżenie do serwera następuje automatycznie, gdy użytkownik zmienia wybór listy; w przeciwnym razie false. Domyślna jest fałszywa.

określić je jako prawdziwe:

<asp:DropDownList ... AutoPostBack="True" ...> 
    ... 
</asp:DropDownList> 

Jeśli nadal nie działa, to może się okazać, że masz kontrole w ramach jednej UpdatePanel i trzeba określić spust.

0

Musisz tylko ustawić Autopostback = True.

Powiązane problemy