更新面板和下拉列表数据绑定两次 - 生命周期

时间:2009-09-19 03:29:18

标签: c# data-binding drop-down-menu asp.net-3.5 page-lifecycle

我认为这是一个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中逐步完成这个?

2 个答案:

答案 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 ------//
    }