如何在 !Page.IsPostBack 之后将我的物品保留在 asp:dropdownlist 中?
How do I keep my items in asp:dropdownlist after !Page.IsPostBack?
我正在通过调用存储过程将 value/text 的列表加载到 asp:dropdownlist 中。我在 !Page.IsPostBack 块内填充 PageLoad 方法的下拉列表,如下所示:
if (!Page.IsPostBack)
{
GetDropDownLists();
DataBind();
}
这是我的后端代码实现:
protected void GetDropDownLists()
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("get_articletype", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
xArticleTypeList.Items.Clear();
xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
xArticleTypeList.SelectedIndex = 0;
xArticleTypeList.DataSource = dt;
xArticleTypeList.DataValueField = "TypeValue";
xArticleTypeList.DataTextField = "TypeName";
xArticleTypeList.DataBind();
}
如果我的代码不在 !Page.IsPostBack 块中,在我单击保存按钮后,默认值将始终是下拉列表的第一项。但是一旦我将我的代码放入 !Page.IsPostBack 块中,我的下拉列表就是空的。这里的参考是我的 asp:dropdownlist.
的前端实现
<asp:DropDownList ID="xArticleTypeList" EnableViewState="true" AutoPostBack="true" CssClass="form-control" runat="server" />
我知道还有其他主题涵盖了这个问题,但是 none 提出的解决方案对我有用。预先感谢您的投入。
您的问题是您在绑定之前插入空白 select 行。结果,当您绑定时,您正在关闭下拉菜单。
这样试试:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadData();
}
void LoadData()
{
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmd = new SqlCommand("get_articletype", conn))
{
DataTable dt = new DataTable();
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
dt.Load(cmd.ExecuteReader());
xArticleTypeList.DataSource = dt;
xArticleTypeList.DataValueField = "TypeValue";
xArticleTypeList.DataTextField = "TypeName";
xArticleTypeList.DataBind();
xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
}
}
}
并且摆脱你的额外调用重新绑定你有这个:
GetDropDownLists();
DataBind(); <--- remove unless you need, or execute BEFORE the GetDropDownList()
因此,将 add/insert 空白行移动到下拉列表中,以便在下拉列表数据绑定之后。
并删除您的 DataBind() - 您不需要它,如果出于某种原因您需要它,则将 DataBind() 移动到您加载 GetDropDownLists() 之前 - 但我的猜测是您只是扔掉它,希望能完成这项工作,它会导致组合框重新 select - 所以删除,除非你给出一个真正好的高质量大纲和说明为什么你有 DataBin() 命令那里 - (但如前所述,如果你真的,但真的确实需要执行该 DataBind() 命令 - 将其移至组合加载之前)。
所以,在
之后添加空行
我正在通过调用存储过程将 value/text 的列表加载到 asp:dropdownlist 中。我在 !Page.IsPostBack 块内填充 PageLoad 方法的下拉列表,如下所示:
if (!Page.IsPostBack)
{
GetDropDownLists();
DataBind();
}
这是我的后端代码实现:
protected void GetDropDownLists()
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("get_articletype", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
xArticleTypeList.Items.Clear();
xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
xArticleTypeList.SelectedIndex = 0;
xArticleTypeList.DataSource = dt;
xArticleTypeList.DataValueField = "TypeValue";
xArticleTypeList.DataTextField = "TypeName";
xArticleTypeList.DataBind();
}
如果我的代码不在 !Page.IsPostBack 块中,在我单击保存按钮后,默认值将始终是下拉列表的第一项。但是一旦我将我的代码放入 !Page.IsPostBack 块中,我的下拉列表就是空的。这里的参考是我的 asp:dropdownlist.
的前端实现<asp:DropDownList ID="xArticleTypeList" EnableViewState="true" AutoPostBack="true" CssClass="form-control" runat="server" />
我知道还有其他主题涵盖了这个问题,但是 none 提出的解决方案对我有用。预先感谢您的投入。
您的问题是您在绑定之前插入空白 select 行。结果,当您绑定时,您正在关闭下拉菜单。
这样试试:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadData();
}
void LoadData()
{
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmd = new SqlCommand("get_articletype", conn))
{
DataTable dt = new DataTable();
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
dt.Load(cmd.ExecuteReader());
xArticleTypeList.DataSource = dt;
xArticleTypeList.DataValueField = "TypeValue";
xArticleTypeList.DataTextField = "TypeName";
xArticleTypeList.DataBind();
xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
}
}
}
并且摆脱你的额外调用重新绑定你有这个:
GetDropDownLists();
DataBind(); <--- remove unless you need, or execute BEFORE the GetDropDownList()
因此,将 add/insert 空白行移动到下拉列表中,以便在下拉列表数据绑定之后。
并删除您的 DataBind() - 您不需要它,如果出于某种原因您需要它,则将 DataBind() 移动到您加载 GetDropDownLists() 之前 - 但我的猜测是您只是扔掉它,希望能完成这项工作,它会导致组合框重新 select - 所以删除,除非你给出一个真正好的高质量大纲和说明为什么你有 DataBin() 命令那里 - (但如前所述,如果你真的,但真的确实需要执行该 DataBind() 命令 - 将其移至组合加载之前)。
所以,在
之后添加空行