2011-03-16 6 views
0

ListViewの中にImageButtonがあります。ユーザーがボタンをクリックすると、操作が実行され、ボタンによって使用される画像が変更されます。もう一度ボタンを選択すると、元の状態に戻ります。リストビュー内のImageButton問題

しかし、これは起こっていません。私はボタンを最初にロードすることができます/方法は、しかし、後方にはありません。

次のコードは、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(); 
     } 
    } 

ListViewPage_PreRenderに結合しています。

答えて

0

私が最初に考えたのは、Page_PreRenderにバインドしていて、通常のPage_Loadまたはイベントでバインドさせるだけではありません。 PreRenderのバインディングが、コマンドハンドラで行っている変更を上書きしていることがわかります。

通常、私は、Page_Loadのバインディングを行うことがあると考えています。!PostBackは、あなたのコマンドが必要な変更を行っているので、initalバインディングを行い、再度バインドしないでください(viewstateに依存します)。別のバインドが発生した場合、コマンドイベントの変更をクリアしないでしょうか?

関連する問題