Lista suspensa em C#, obtendo itens suspensos da lista de suspensão depois de cada vez usando a seleção de um item

StackOverflow https://stackoverflow.com/questions/1759086

  •  20-09-2019
  •  | 
  •  

Pergunta

Bem, o problema é que estou tentando fazer com que o DDL: 1. Recenho categorias de uma tabel db - funcionando 2. Onchange Selecione de uma tabela diferente Os produtos pelo item no DDL - funcionando teve um problema com o número 1, mas corrigiu esse problema . Eu descobri que, para fazer o nº 1 funcionar, tenho que usar o postback. Fiz isso e tudo nessa parte está funcionando bem e tudo está funcionando ... mas meu problema de abraço (e não consigo encontrar nenhuma boa resposta para isso) é que toda vez que eu mudei o item, estou recebendo todas as vezes Novamente (eu tenho inicialmente 8 itens - tempo de SECONT 16 - 24 etc ....) Tentei usar: ddlcatagories.items.clear (); Quando uso que não estou recebendo duplicatas, mas não estou recebendo nada, é preciso a primeira categoria da lista todas as vezes, não importa o que eu escolhi na lista. Tentando descobrir isso na semana passada ...por favor ajude :-)

    public partial class selectNamesFromCatagories : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ddlCatagories.Items.Clear();
        SqlDataReader dr = DbHelper.ExecuteReader(
            sqlConn1.home,
            "spSelectNamesFromCatagories");
        while (dr.Read())
        {
            ListItem li = new ListItem(dr["CategoryName"].ToString());
            ddlCatagories.Items.Add(li);
        }
        dr.Close();
    }
    protected void ddlCatagories_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlDataReader dr = DbHelper.ExecuteReader(
                            sqlConn1.home,
                            "spProductsByCatagoryID",
                            new SqlParameter("@catName", ddlCatagories.Text)
                            );
        while (dr.Read())
        {
            TableRow tr = new TableRow();
            for (int i = 0; i < dr.FieldCount; i++)
            {
                TableCell td = new TableCell();
                td.Text = dr[i].ToString();
                tr.Controls.Add(td);
            }
            tblProductsByCatagories.Controls.Add(tr);
        }
    }
}
Foi útil?

Solução

Preencha apenas a lista suspensa na primeira carga, verificando se a página não foi postada de volta, ou seja.

if (!Page.IsPostBack)
{
    // Populate list
}

Outras dicas

Eu concordo com Dan e adicionaria o seguinte se você tiver algum controle habilitado para AJAX, pois eles podem gerar retornos de chamada.

if (!Page.IsPostBack && !Page.IsCallBack)
{
    // Populate list
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top