ImageButton в пределах проблемы Listview - PullRequest
0 голосов
/ 16 марта 2011

У меня есть ImageButton в пределах ListView. Когда пользователь нажимает кнопку, он выполняет операцию, а затем изменяет изображение, используемое кнопкой. При повторном выборе кнопки она должна вернуться в прежнее состояние.

Однако этого не происходит. Я могу получить кнопку для загрузки в первый раз / путь, но не назад.

Следующий код находится в OnItemDataBinding:

 if (e.CommandName == "fave")
    {//save to favourites list - is logged in
        //http://www.avbuyer.com/dealers/Detailed.asp?Id=102&AId=25633&Add=true

        if (Session["MemberId"] != null && Session["MemberId"].ToString().Trim() != "")
        {
            using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["AvBuyerConnectionString2"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand("saveFavourites", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@memberId", Session["MemberId"].ToString());
                    cmd.Parameters.AddWithValue("@aircraftId", e.CommandArgument);
                    cmd.Parameters.AddWithValue("@dateAdded", DateTime.Now);
                    conn.Open();
                    try
                    {//try saving
                        cmd.ExecuteNonQuery();
                        //update button
                        ((ImageButton)e.Item.FindControl("ibtnSave")).ImageUrl = "../_img/aircraftsales/acresults_savebt_remove.png";
                        ((ImageButton)e.Item.FindControl("ibtnSave")).ToolTip = "Remove from Favorites";
                        ((ImageButton)e.Item.FindControl("ibtnSave")).CommandName = "removefave";
                        //Response.Write("CLICKED: Fave");
                        //pnlGeneralSuccessExtender.Show();
                    }
                    catch { pnlGeneralErrorExtender.Show(); }
                }
            }
        }
        else
        {//not logged in or other problem
            //please log-in
            pnlSaveLogInExtender.Show();
        }
    }

    else if (e.CommandName == "removefave")
    {//remove listed aircraft from favourites
        if (Session["MemberId"] != null && Session["MemberId"].ToString().Trim() != "")
        {
            using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["AvBuyerConnectionString2"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand("DELETE FROM MembersAircraftShortList WHERE MemberId=" + Session["MemberId"].ToString().Trim() + "AND AircraftId =" + e.CommandArgument, conn))
                {
                    conn.Open();
                    try
                    {
                        cmd.ExecuteNonQuery();
                        //pnlGeneralSuccessExtender.Show();
                        ((ImageButton)e.Item.FindControl("ibtnSave")).ImageUrl = "../_img/aircraftsales/acresults_savebt.png";
                        ((ImageButton)e.Item.FindControl("ibtnSave")).ToolTip = "Save to Favorites";
                        ((ImageButton)e.Item.FindControl("ibtnSave")).CommandName = "fave";
                        //lvResults.DataBind();
                    }
                    catch { pnlGeneralErrorExtender.Show(); }
                }
            }
        }
        else
        {//please log-in
            pnlSaveLogInExtender.Show();
        }
    }

ListView связан в Page_PreRender.

Есть идеи ???

1 Ответ

0 голосов
/ 16 марта 2011

Моя первая мысль - почему вы связываете Page_PreRender, а не просто позволяете ему связываться с обычным Page_Load или событием. Я догадываюсь, что привязка в PreRender перезаписывает изменения, которые вы делаете в обработчике команд.

Обычно я думаю, что поток будет выполнять привязку в проверке Page_Load для !PostBack, чтобы выполнить начальную привязку, и никогда не связываться снова (полагаясь на представление состояния), поскольку ваши команды вносят необходимые изменения. Если произойдет другое связывание, не будет ли оно очищено от изменений, внесенных вашим командным событием?

...