Выпадающий список в C #, когда элементы выпадающего списка переполняются после каждого использования выбора элемента

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

  •  20-09-2019
  •  | 
  •  

Вопрос

ну, проблема в том, что я пытаюсь заставить DDL:1.Извлекать каталоги из таблицы базы данных - работает 2.onChange выбирает из другой таблицы продукты по номенклатуре в DDL - работает была проблема с No1, но эту проблему исправили.я обнаружил, что для того, чтобы заставить No1 работать, я должен использовать обратную передачу.сделал это, и все в этой части работает хорошо, и на самом деле все работает...но моя проблема с объятиями (и я не могу найти на нее никакого хорошего ответа) заключается в том, что каждый раз, когда я меняю элемент, я получаю все снова и снова (у меня изначально 8 элементов - второе время 16-24 и т.д.) пытался использовать:Ddlкатагории.Товары.Очистить ();когда я использую это, я не получаю никаких дубликатов, но тогда я ничего не получаю, он каждый раз берет первую категорию из списка, независимо от того, что я выбрал в списке..пытаюсь разобраться в этом за последнюю неделю ... пожалуйста, помогите :-)

    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);
        }
    }
}
Это было полезно?

Решение

Заполняйте выпадающий список только при первой загрузке, проверяя, не была ли страница отправлена обратно ie.

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

Другие советы

Я согласен с Дэном и также добавил бы следующее, если у вас есть какие-либо элементы управления с поддержкой ajax, поскольку они могут генерировать обратные вызовы.

if (!Page.IsPostBack && !Page.IsCallBack)
{
    // Populate list
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top