0

問題は、私が DDL を取得しようとしていることです: 1. DB テーブルからカテゴリを受け取ります - 動作しています 2. OnChange は別のテーブルから DDL のアイテムによって製品を選択します - 動作には No1 に問題がありましたが、その問題は修正されました. No1を機能させるには、ポストバックを使用する必要があることがわかりました。それを行い、その部分のすべてがうまく機能し、実際にはすべてが機能しています...しかし、私の抱擁の問題(そして、それに対する良い答えを見つけることができません)は、アイテムを変更するたびに、何度もやり直してしまうことです再び(私は最初に8つのアイテムを持っています-2番目の時間は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 に答える