我从我的数据库中加载了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();
}
}
答案 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
项检查之外。