我搜索了一堆类似的问题并做了一些谷歌搜索,但我找不到问题的答案......
我希望有一个下拉列表,该列表由数据库中的类别填充...在选择类别并点击提交时,将使用该类别中的所有项目填充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();
}
答案 0 :(得分:0)
我真的把它解决了所有人...对于任何有相同问题的人,您需要检查page_load方法是否正在加载页面,因为正在生成新页面,或者信息刚刚被回发为用户。如果它只是回发,我们不想再次填充类别下拉框。所以我们在page_load方法中使用IsPostBack对象,如下所示:
if (!IsPostBack)
{
PopulateCategorySelection();
}