Дважды обновить панель данных и раскрывающийся список - жизненный цикл - PullRequest
0 голосов
/ 19 сентября 2009

Я думаю, что это вопрос жизненного цикла страницы 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 ]

1 голос
/ 20 сентября 2009

Код Химадри заставил меня задуматься (спасибо за усилия !!!!), что для операций удаления мне действительно не нужно повторно привязывать выпадающий список, у меня есть SelectedValue .... так что я могу просто удалить его из DropDownList.

DropDownList1.Items.Remove(selectedValue);

Duh.

У меня есть на другой половине кода страницы, которая выполняет операцию вставки типа (отсюда панель обновления), которая вызывала тот же код (BindCombo Химадри) и имела ту же проблему, но я думаю, что могу найти аналогичное решение .

Я все еще хотел бы знать, как отладчик VS позволяет этому случиться.

Еще раз спасибо, Химадри!

0 голосов
/ 19 сентября 2009

Проверьте приведенный ниже код, если он может вам помочь.

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