DropDownList в C #, получая переполнение элементов DropDownList после каждого использования выбора элемента - PullRequest
0 голосов
/ 19 ноября 2009

Ну, проблема в том, что я пытаюсь получить DDL для: 1. Получить категории из БД tabel - работает 2. OnChange выбрать из другой таблицы товары по элементу в DDL - работает была проблема с № 1, но исправил эту проблему. я узнал, что для того, чтобы получить № 1, я должен использовать обратную передачу. сделал это, и каждая вещь в этой части работает хорошо и на самом деле каждая вещь работает ... но моя проблема с объятиями (и я не могу найти какой-либо хороший ответ на это) заключается в том, что каждый раз, когда я меняю предмет, я получаю все время все время еще раз (у меня есть начальный 8 пункт - второй раз 16 - 24 и т. д ....) пытался использовать: ddlCatagories.Items.Clear (); когда я использую это, я не получаю никаких дубликатов, но тогда, я не получаю ничего, он берет первую категорию из списка каждый раз, независимо от того, что я выбрал в списке .. пытаясь выяснить это за последнюю неделю ... пожалуйста, помогите: -)

    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);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

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

if (!Page.IsPostBack)
{
    // Populate list
}
0 голосов
/ 19 ноября 2009

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

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