单击提交按钮后,ASP.NET ComboBox为空

时间:2013-11-25 20:36:36

标签: c# asp.net .net

我从我的数据库中加载了Combobox。首先,当页面加载时,我的列表中填充了数据。 当我点击提交按钮时,我的列表变空。 我的代码中我做错了什么?

public void ListCategory()
    {
        using (SqlConnection conn = new SqlConnection(CS))
        {
            //SqlCommand cmd = new SqlCommand("select distinct category FROM kategorija", conn);
            conn.Open();


            SqlDataAdapter da = new SqlDataAdapter("select distinct category FROM kategorija", conn);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            da.Fill(ds);

            ASPxComboBox1.Columns[0].Caption = "Категорија";
            ASPxComboBox1.Columns[0].FieldName = "Category";

            ASPxComboBox1.DataSource = ds;
            ASPxComboBox1.DataBind();         
        }
    }

以及页面加载我这样做

protected void Page_Load(object sender, EventArgs e)
   {
       if (!IsPostBack)
       {
           ListCategory();
       }  
   }

4 个答案:

答案 0 :(得分:1)

当您按下按钮时,您正在执行PostBack。条件(!IsPostBack)表示"如果不是在回发之后,请执行此操作"。但是,你 试图做一个PostBack,所以条件很愚蠢(因为当你做回发时,会话中的所有东西都会丢失)。

您需要将其移出条件:

protected void Page_Load(object sender, EventArgs e)
{
       if (!IsPostBack)
       {
           //Other stuff done only once during the page initialization
       }  

       ListCategory();
}

或者使用Session来记住你的组合框值。

答案 1 :(得分:0)

尝试

protected void Page_Load(object sender, EventArgs e)
   {
     ListCategory();
   }// witout Ispostback

答案 2 :(得分:0)

使用ASP.NET webforms ViewState,加载到表单中的数据将在回发后保留。所以通常你检查回发条件的代码是有效的,并且工作得很好。但是,其他因素(如禁用viewstate或操纵其他代码区域中的控件)可能会影响回发后的结果。

    protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.ViewStateMode = ViewStateMode.Disabled;//now a postback will lose data

        if (!IsPostBack)
        {
            GridView1.DataSource = new List<string> { "a", "b" };
            GridView1.DataBind();
        }

    }

在这种情况下,您可以删除IsPostBack检查或重新启用视图状态。如果问题出在您未显示的另一个代码区域,则最好通过删除对IsPostBack的检查来修复该代码,而不是依赖于效率低下的设计。

答案 3 :(得分:0)

将数据源绑定到!postback项检查之外。