0

好吧,问题是我试图让 DDL: 1. 从 DB 表中接收类别 - 工作 2. OnChange 从不同的表中选择 DDL 中的项目的产品 - 工作时 No1 有问题,但解决了这个问题. 我发现要让 No1 工作,我必须使用回发。做到了,那部分的每一件事都运作良好,实际上每一件事都在运作......但我的拥抱问题(我找不到任何好的答案)是每次我改变项目时,我都会得到所有的时间再次(我最初有 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);
        }
    }
}
4

2 回答 2

1

仅在第一次加载时通过检查页面是否未回发来填充 DropDownList。

if (!Page.IsPostBack)
{
    // Populate list
}
于 2009-11-18T21:14:47.107 回答
0

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

if (!Page.IsPostBack && !Page.IsCallBack)
{
    // Populate list
}
于 2009-11-18T21:21:08.263 回答