القائمة المنسدلة في C#، والحصول على عناصر القائمة المنسدلة في التدفق بعد كل مرة باستخدام عنصر

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

  •  20-09-2019
  •  | 
  •  

سؤال

حسنًا ، تكمن المشكلة في أنني أحاول الحصول على DDL إلى: 1. تكرار Catagories من Tabel DB - العمل 2. OnChange حدد من جدول مختلف المنتجات بواسطة العنصر في DDL - كان العمل مشكلة مع NO1 ولكن تم إصلاح هذه المشكلة . اكتشفت أنه للحصول على NO1 العمل ، يجب أن أستخدم Postback. هل فعلت ذلك وكل شيء في هذا الجزء يعمل بشكل جيد ويعمل كل شيء على ما يرام ... لكن مشكلة العناق الخاصة بي (ولا يمكنني العثور على أي إجابة جيدة لذلك) هي أنه في كل مرة أقوم فيها بتغيير العنصر الذي يحصل عليه كل الأوقات في كل مكان مرة أخرى (لديّ initialy 8 item - secont time 16 - 24 etc ....) حاول استخدام: 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);
        }
    }
}
هل كانت مفيدة؟

المحلول

تملأ فقط القائمة المنسدلة عند التحميل الأول عن طريق التحقق مما إذا كانت الصفحة لم تنشر مرة أخرى أي.

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

نصائح أخرى

وأنا أتفق مع دان وسأضيف ما يلي أيضًا إذا كان لديك أي عناصر تحكم في AJAX حيث قد تنشئ عمليات الاسترجاعات.

if (!Page.IsPostBack && !Page.IsCallBack)
{
    // Populate list
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top