Click here to Skip to main content
15,891,136 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
I have a imagebutton in a grid and when i click on it i want the label next to it to get updated. The problem is right now when i do this entire page gets reloaded which is annoying. I want to make it like facebook where when you like a comment the entire page does not reload only a small fraction is reloaded.

XML
<asp:ImageButton ID="lnklike" runat="server" ImageUrl="~/Images/thumbsup.png" height="20px" Width="20px" CommandName="like" CommandArgument='<%# Eval("ScrapId")%>'/> &nbsp;
<asp:UpdatePanel ID="UpdatePanel1" runat="Server">
    <Triggers>
        <asp:AsyncPostBackTrigger controlid="lnklike" eventname="click"  />
    </Triggers>
    <ContentTemplate>  <asp:Label ID="Label1" runat="server" Text='<%# Controls_GetUserScraps.abc((int)Eval("ScrapId")) %>' />


C#
protected void GridViewRowCommand(Object sender, GridViewCommandEventArgs e)
    {
        var scrapId = Int32.Parse(e.CommandArgument.ToString());
        GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
        int index = gvr.RowIndex;

        switch (e.CommandName)
        {
            case "like":
                //GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
                //int index = gvr.RowIndex;

                string chklike = "select likestatus from tbl_like where fromid='" + Session["UserId"] + "' and scrapid='" + scrapId + "'";
                int a = dbo.GetLikesMethod(chklike);
                string chkthumbsdown = "select thumbsdownstatus from tbl_like where fromid='" + Session["UserId"] + "' and scrapid='" + scrapId + "'";
                int b = dbo.GetLikesMethod(chkthumbsdown);

                if (a == 0 && b == 0)
                {
                    string sendlike = "insert into tbl_like (ScrapId,FromId,LikeStatus) values('" + scrapId + "','" + Session["UserId"] + "',1)";
                    dbo.insert(sendlike);
                   int likes= abc(scrapId);
                    //GetUserScraps(int.Parse(Request.QueryString["Id"].ToString()));
                    Label lnklike = (Label)GridViewUserScraps.Rows[index].FindControl("Label1");
                        lnklike.Text= likes.ToString();
                }
                else if (a != 0)
                {

                    Response.Write("already liked");
                }
                else if (b != 0)
                {
                    Response.Write("you can not like something you already downvoted!");
                }

                break;


public void GetUserScraps(int Id)
   {

       string getUserScraps = "SELECT u.Id as UserId,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID as ScrapId FROM [tbl_user] as u, Scrap as s WHERE u.Id=s.FromId AND s.ToId='" + Request.QueryString["Id"].ToString() + "'";
       //string getlikes = "select COUNT(*) from tbl_like inner join Scrap on tbl_like.scrapid=Scrap.Id where tbl_like.likestatus=1 and tbl_like.scrapid='"+<%#DataBinder.Eval(Container.DataItem,"ScrapId")%>+"'";
       //  <%#DataBinder.Eval(Container.DataItem,"ScrapId")%>


       dt = dbClass.ConnectDataBaseReturnDT(getUserScraps);
       if (dt.Rows.Count > 0)
       {
           GridViewUserScraps.DataSource = dt;
           GridViewUserScraps.DataBind();

       }
Posted
Updated 4-Apr-13 3:17am
v4

1 solution

Put the label in UpdatePanel and update the panel whenever you need.
Try this:
HTML:
ASP.NET
<asp:updatepanel id="UpdatePanel1" runat="Server" xmlns:asp="#unknown">
    <contenttemplate>  
          <asp:label id="Label1" runat="server" text="<%# Controls_GetUserScraps.abc((int)Eval("ScrapId")) %>" />
    </contenttemplate>
</asp:updatepanel>

CS:
C#
Label lnklike = (Label)GridViewUserScraps.Rows[index].FindControl("Label1");
lnklike.Text= likes.ToString();
UpdatePanel UpdatePanel1= (UpdatePanel)GridViewUserScraps.Rows[index].FindControl("UpdatePanel1");
UpdatePanel1.Update();



--Amit
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900