C#中的DropDownList,每次使用选择项后,DropDownList项都会溢出

时间:2009-11-18 21:05:19

标签: c#-2.0 ddl clear

问题是我正在尝试将DDL用于: 1.从数据库表中重新编写类别 - 工作 2. OnChange根据DDL中的项目从不同的表中选择产品 - 工作 No1遇到问题,但解决了这个问题。我发现要让No1工作,我必须使用回发。做到了这一点,那部分的每件事都运作良好,并且实际上每件事都有效...但我的拥抱问题(我无法找到任何好的答案)是每次我改变项目我都会得到所有的时间再次(我最初8项 - secont时间16 - 24等....) 试图使用:ddlCatagories.Items.Clear(); 当我使用它我没有得到任何重复但是,然后,我没有得到任何东西,它每次从列表中的第一个catagory,无论我在列表中选择什么.. 试图弄清楚过去一周...请帮忙: - )

    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 个答案:

答案 0 :(得分:1)

仅在首次加载时填充DropDownList,方法是检查页面是否还没有回发,即

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

答案 1 :(得分:0)

我同意Dan的观点,如果你有任何启用了ajax的控件,他们会添加以下内容,因为它们可能会产生回调。

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