user2621743
user2621743

Reputation: 77

Count of likes for image

i am creating an image gallery (images stored in Images folder,path saved in db) in the gridview

Each imagename is saved in dbwith and uinque id and the columnname : storyid.

can anyone tell me how to bind the indiviudal images "like" count in the lblcount

<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="SM1">
</asp:ScriptManager>
<div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Font-Names="Arial"
        OnRowCommand="GridView1_RowCommand1">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:UpdatePanel runat="server" ID="up1" UpdateMode="Conditional">
                        <ContentTemplate>
                            <asp:Button runat="server" ID="IncreaseButton" Text="Like" CommandName="Increase"
                                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
                                <asp:Label runat="server" ID="lblCount"></asp:Label>
                            <div style="display: none;">
                                <asp:Label Text="<%#Bind('StoryId')%>" ID="lblStoryid" runat="server"></asp:Label>
                            </div>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:ImageField DataImageUrlField="FilePath" ControlStyle-Width="100" ControlStyle-Height="100"
                HeaderText="Preview Image">
                <ControlStyle Height="100px" Width="100px"></ControlStyle>
            </asp:ImageField>
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:Label Text="Description" runat="server" Visible="False"></asp:Label>
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label Text="<%#Bind('Description')%>" ID="lblImageid" runat="server"></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>
</form>

public partial class Gallery : System.Web.UI.Page

{

private void bindimage()
{
    DataTable dt = new DataTable();
    String strConnString = System.Configuration.ConfigurationManager.
        ConnectionStrings["dbconnection"].ConnectionString;
    string strQuery = "select * from story";


    SqlCommand cmd = new SqlCommand(strQuery);
    SqlConnection con = new SqlConnection(strConnString);
    SqlDataAdapter sda = new SqlDataAdapter();
    cmd.CommandType = CommandType.Text;
    cmd.Connection = con;
    try
    {
        con.Open();
        sda.SelectCommand = cmd;
        sda.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    finally
    {
        con.Close();
        sda.Dispose();
        con.Dispose();
    }
}

protected void GridView1_RowCommand1(object sender, GridViewCommandEventArgs e)
{

    if (e.CommandName == "Increase")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = GridView1.Rows[index];
        Label listPriceTextBox = (Label)row.FindControl("lblStoryid");
        int storyId = Convert.ToInt32(listPriceTextBox.Text);
        string UserEmailid = "[email protected]";
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;
        SqlConnection con = new SqlConnection(strConnString);

        string strQuery = "INSERT INTO Likes(storyId,UserEmailid) VALUES(@storyId,@UserEmailid)";
        string LikeCount = "SELECT COUNT(StoryId) FROM Likes Where StoryId=1001;;";
        Label lblStoryid = (Label)row.FindControl("lblStoryid");
        lblStoryid.Text = LikeCount;

        SqlCommand cmd = new SqlCommand(strQuery);
        SqlCommand cmdl = new SqlCommand(LikeCount);
        cmdl.CommandType = CommandType.Text;
        cmdl.Connection = con;


        cmd.Parameters.AddWithValue("@storyId", storyId);
        cmd.Parameters.AddWithValue("@UserEmailid", UserEmailid);
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;

         try
         {
             con.Open();
             cmd.ExecuteNonQuery();
             cmdl.ExecuteNonQuery();

         }
         catch (Exception ex)
         {
             Response.Write(ex.Message);
         }
         finally
         {
             con.Close();
             con.Dispose();
         }
        }
    }
}

Upvotes: 1

Views: 280

Answers (1)

James
James

Reputation: 82136

You just need to pull the number of likes out when you pull the story record down in your bindimage method e.g.

SELECT Story.StoryId, Max(Description) As Description, Count(Likes.StoryId) as LikeCount from Story
INNER JOIN Likes On Likes.StoryId = Story.StoryId
GROUP BY Story.StoryId

Then you can bind the count like

<asp:Label Text='<%# Bind("LikeCount")%>' runat="server" ID="lblCount"></asp:Label>

See this fiddle.

Upvotes: 1

Related Questions