我认为这是一个asp.net页面生命周期问题,但是,我无法弄明白。
我在更新面板中有一个下拉列表,其中列出了用户,然后在其下方显示详细信息(更新或删除)。当我单击删除时,后面的代码将清除ddl(删除已删除的用户),然后重新绑定它。一切都很好。在代码结尾和页面更新之间的某处,然后再次附加列表。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.AppendDataBoundItems = true;
DropDownList1.Items.Insert(0, new ListItem("Select a User", "select"));
DropDownList1.SelectedValue = "select";
DropDownList1.DataSourceID = "srcUsers";
DropDownList1.DataBind();
}
}
protected void btnDelete_Click(object sender, EventArgs e)
{
DropDownList1.AppendDataBoundItems = false;
DropDownList1.DataSourceID = "srcUsers";
DropDownList1.DataBind();
DropDownList1.AppendDataBoundItems = true;
DropDownList1.Items.Insert(0, new ListItem("Select a User", "select"));
DropDownList1.SelectedValue = "select";
}//at this point, the quick watch shows the correct count for the ddl
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" Width="150" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
注意:srcUsers
是对象数据源
如果我从按钮中删除ddl绑定代码,那么它根本不会更新ddl(使用它,它会执行两次!)
第二次绑定在哪里?如果我删除按钮代码,为什么不绑定?为什么我不能在VS中逐步完成这个?
答案 0 :(得分:1)
Himadri的代码让我思考(感谢努力!!!!)对于删除操作,我真的不需要重新绑定下拉列表,我有SelectedValue ....所以我可以从中删除它下拉列表。
DropDownList1.Items.Remove(selectedValue);
咄。
我有另一半的页面代码执行插入类型操作(因此更新面板)调用相同的代码(Himadri的BindCombo)并具有相同的问题,但我想我可以找到类似的解决方案
我仍然想知道VS调试器是如何实现的。
再次感谢Himadri!
答案 1 :(得分:0)
检查下面的代码是否可以帮到你。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindCombo();
}
}
public void BindCombo()
{
DropDownList1.Items.Clear();
DropDownList1.AppendDataBoundItems = true;
DropDownList1.Items.Insert(0, new ListItem("Select a Category", "select"));
DropDownList1.SelectedValue = "select";
DropDownList1.DataSourceID = "ds1";
DropDownList1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
//---- It can be placed in delete button's click event also ------//
ds1.DeleteCommand = "Delete from Categories where CategoryID="+DropDownList1.SelectedValue;
ds1.Delete();
BindCombo();
//---- It can be placed in delete button's click event also ------//
}