Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新面板和下拉列表数据绑定两次-生命周期_C#_Data Binding_Drop Down Menu_Asp.net 3.5_Page Lifecycle - Fatal编程技术网

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

C# 更新面板和下拉列表数据绑定两次-生命周期,c#,data-binding,drop-down-menu,asp.net-3.5,page-lifecycle,C#,Data Binding,Drop Down Menu,Asp.net 3.5,Page Lifecycle,我认为这是一个asp.net页面生命周期的问题,但尽管如此,我还是不太明白 我在更新面板中有一个下拉列表,列出用户,然后在下面显示详细信息(更新或删除)。当I单击delete时,代码隐藏并清除ddl(以删除删除的用户),然后重新绑定它。都很好。在代码结束和页面更新之间的某个地方,它会再次追加列表 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DropDownLis

我认为这是一个asp.net页面生命周期的问题,但尽管如此,我还是不太明白

我在更新面板中有一个下拉列表,列出用户,然后在下面显示详细信息(更新或删除)。当I单击delete时,代码隐藏并清除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> 
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
DropDownList1.AppendDataBoundItems=true;
DropDownList1.Items.Insert(0,新列表项(“选择用户”、“选择”));
DropDownList1.SelectedValue=“选择”;
DropDownList1.DataSourceID=“srcUsers”;
DropDownList1.DataBind();
}
}
受保护的无效BTN删除\单击(对象发送者,事件参数e)
{
DropDownList1.AppendDataBoundItems=false;
DropDownList1.DataSourceID=“srcUsers”;
DropDownList1.DataBind();
DropDownList1.AppendDataBoundItems=true;
DropDownList1.Items.Insert(0,新列表项(“选择用户”、“选择”));
DropDownList1.SelectedValue=“选择”;
}//此时,“快速观察”将显示ddl的正确计数
注意:
srcUsers
是一个对象数据源

如果我从按钮中删除ddl绑定代码,那么它根本不会更新ddl(在中,它会更新两次!)


第二次在哪里装订?如果我删除按钮代码,为什么它没有绑定?为什么我无法在VS中单步完成此操作?

检查下面的代码,如果它能帮助您

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

Himadri的代码让我想到(感谢您的努力!!!!)对于删除操作,我真的不需要重新绑定dropdownlist,我拥有SelectedValue。。。。所以我可以从下拉列表中删除它

DropDownList1.Items.Remove(selectedValue);

在页面的另一半代码中,我有一个执行插入类型操作(因此是更新面板)的代码,该操作调用了相同的代码(Himadri的BindCombo),并且存在相同的问题,但我认为我可以找到类似的解决方案

我仍然想知道VS调试器是如何让这种情况发生的


再次感谢希马德里

如果您发布了声明对象数据源的代码,可能会有所帮助。除非我遗漏了什么,否则这就是我现在拥有的。我遇到的问题是,在BindCombo触发(它向ddl中填充了20项)并且页面在其生命周期中运行之后,它在某个地方又添加了20项(40项)。DDL.Items.Clear();没有改变这一点。我真的很想知道如何更好地使用VS调试器来查找第二次添加的项;从BindCombo()和替换的BindCombo()中,仅使用DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex)删除语句;然后检查代码。该组合不包含两次数据。如果组合中填充了20条记录,则它始终保留20条或更少的记录(通过DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);)删除一些记录之后)。请再查一下。谢谢我真的不认为这和装订有任何关系。。。我认为这与它在更新面板中发布有关。我的斗争是在调试。如果代码位于aspx页面中,则运行正常。嵌套在一个更新面板和某处,我得到了一个额外的绑定。。。我就是无法调试哪里。删除第(i)项;解决了眼前的问题。谢谢你的时间,在我的帖子里我已经检查了我发布的代码,dropdownlist只绑定了一次。绑定必须在if(!IsPostback)下,以便在首次加载页面时绑定下拉列表。现在我发现下拉列表没有绑定到其他任何地方。不用!iPostback下拉列表将在每次回发时额外绑定。谢谢你的评论。我会尝试更多。