.NET Web表单下拉列表在回发时重置

时间:2014-09-17 01:38:22

标签: c# asp.net webforms

我搜索了一堆类似的问题并做了一些谷歌搜索,但我找不到问题的答案......

我希望有一个下拉列表,该列表由数据库中的类别填充...在选择类别并点击提交时,将使用该类别中的所有项目填充gridview。

现在,一切正常,除非我在类别下拉框中选择任何内容,它会立即重置为第一个选择。所以我无法将第一个以外的任何值提交给gridview。我在这个项目上使用autopostback。我也尝试过使用appenddatabounditems,但只是填充了越来越多相同条目的列表......

我很乐意,如果有人能告诉我如何在回发后让下拉列表保持其位置?

Selected Category:
    <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="True" ViewStateMode="Enabled">
    </asp:DropDownList>
    <asp:Button ID="buttonCategorySubmit" runat="server" OnClick="buttonCategorySubmit_Click" Text="Submit" />
    <br />

</div>
    <asp:GridView ID="CategoryGridView" runat="server">
    </asp:GridView>
    <br />

 protected void Page_Load(object sender, EventArgs e)
    {
        PopulateCategorySelection();
    }

    public void PopulateCategorySelection()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnString"]);
        SqlCommand cmd = new SqlCommand("AllCategories", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        SqlDataReader ddlValues = cmd.ExecuteReader();
        ddlCategory.DataSource = ddlValues;
        ddlCategory.DataValueField = "CategoryID";
        ddlCategory.DataTextField = "Title";
        ddlCategory.DataBind();

        conn.Close();


    }

    protected void buttonCategorySubmit_Click(object sender, EventArgs e)
    {
        PopulateCategoryTable();
    }

    public void PopulateCategoryTable()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["Connstring"]);
        SqlCommand cmd = new SqlCommand("SelectCategory", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@Selected", ddlCategory.SelectedItem.Value);

        conn.Open();

        SqlDataAdapter adapter = new SqlDataAdapter();
        DataSet ds = new DataSet();
        adapter = new SqlDataAdapter(cmd);
        adapter.Fill(ds);
        conn.Close();
        CategoryGridView.DataSource = ds.Tables[0];
        CategoryGridView.DataBind();

        conn.Close();
    }

1 个答案:

答案 0 :(得分:0)

我真的把它解决了所有人...对于任何有相同问题的人,您需要检查page_load方法是否正在加载页面,因为正在生成新页面,或者信息刚刚被回发为用户。如果它只是回发,我们不想再次填充类别下拉框。所以我们在page_load方法中使用IsPostBack对象,如下所示:

 if (!IsPostBack) 
        {
            PopulateCategorySelection();
        }