2013-02-12 40 views
1

我正在创建一个有点像社交网站的大学网站,人们可以在彼此的墙上张贴剪贴簿留言。我想包括像/不同或投票上/投下每个废料。我创建了这个表,名为 tbl_like ...赞/反对GridView中的投票

LikeId | ScrapId | FromId | LikeStatus |时间

废料表: ScrapId | FromId | toId | msg | sendDate

接下来我该做什么?

<asp:GridView ID="GridViewUserScraps" ItemStyle-VerticalAlign="Top" AutoGenerateColumns="False" 
       GridLines="None" Width="100%" ShowHeader="False" runat="server" AlternatingRowStyle-BackColor="#A5A5A5" 
       CellPadding="4" ForeColor="#333333"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <table align="left" cellpadding="1" cellspacing="2"> 
           <tr> 
            <td> 
             <a href='<%#getUserHREF(Container.DataItem)%>'> 
              <img align="middle" src='<%#getSRC(Container.DataItem)%>' border="0" width="50px" /></a> 
            </td> 
            <td> 
             &nbsp;</td> 
           </tr> 
          </table> 
          <div align="justify"> 
           <%#DataBinder.Eval(Container.DataItem, "Message")%> 
           <br /> 
           <br /> 
          </div> 
          <span class="SmallBlackText">Posted On: &nbsp;</span> 
          <asp:Label ID="lblSendDate" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"SendDate")%>'></asp:Label> 
          </span> 
          <br /> 
          <asp:LinkButton ID="lnklike" runat="server">Like</asp:LinkButton> 
          &nbsp;&nbsp;&nbsp; 
          <asp:LinkButton ID="lnkunlike" runat="server">unlike</asp:LinkButton> 
          &nbsp;&nbsp; 
          <asp:Label ID="lbllike" runat="server" Text="likes:"></asp:Label> 
          <asp:Label ID="lbllikecount" runat="server" Text="0"></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
       <RowStyle BackColor="#EFF3FB" /> 
       <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
       <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
       <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
       <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
       <EditRowStyle BackColor="#2461BF" /> 
       <AlternatingRowStyle BackColor="White" /> 
      </asp:GridView> 

代码背后:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      GetUserScraps(int.Parse(Request.QueryString["Id"].ToString())); 
     } 
    } 
    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 [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=23"; 
     dt1= 
     dt = dbClass.ConnectDataBaseReturnDT(getUserScraps); 
     if (dt.Rows.Count > 0) 
     { 
      GridViewUserScraps.DataSource = dt; 
      GridViewUserScraps.DataBind(); 
     } 

    } 

回答

1

使用OnItemCommand事件GridView

在你的HTML:

<asp:GridView .... OnItemCommand="CommandLinkClicked"> 

    <asp:LinkButton ID="lnklike" runat="server" CommandName="like" CommandArgument='<%# Eval("ScrapId")%>'>Like</asp:LinkButton> 
    <asp:LinkButton ID="lnkunlike" runat="server" CommandName="unlike" CommandArgument='<%# Eval("ScrapId")%>'>unlike</asp:LinkButton> 

</asp:GridView> 

并在后面的代码:

protected void CommandLinkClicked(object sender, DataGridCommandEventArgs e) 
{ 
    var scrapId = Int32.Parse(e.CommandArgument.ToString()); 
    switch (e.CommandName) 
    { 
     case "like" : 
       //do stuff 
       break; 
     case "unlike" : 
       //do stuff 
       break; 
    } 
} 

CommandArguemnt应该是项目的ID应该像/不同状态进行更新。


我清理你的SQL,现在它返回兼评算,每废料:

string getUserScraps = "SELECT u.Id as UserId,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID as ScrapId, ISNULL(COUNT(l.scrapid), 0) as CommentCount FROM Scrap as s INNER JOIN [User] as u on u.Id = s.FromId LEFT JOIN tbl_like as l on l.scrapid = s.Id and l.likestatus = 1 WHERE s.ToId = '" + Request.QueryString["Id"].ToString() + "' GROUP BY u.Id,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID"; 

在这里,你有更多的阅读的版本(这是同上!)

SELECT u.Id as UserId,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID as ScrapId, ISNULL(COUNT(l.scrapid), 0) as CommentCount 
FROM Scrap as s 
INNER JOIN [User] as u on u.Id = s.FromId 
LEFT JOIN tbl_like as l on l.scrapid = s.Id and l.likestatus = 1 
WHERE s.ToId = 23 --here goes id! 
GROUP BY u.Id,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID 

它为每个废料计数的评论,如果没有评论返回0。将GridView列绑定到CommentCount并且它应该正常工作

+0

如何显示每个废品的喜欢数量? 从tbl_like内部连接中选择COUNT(*)在tbl_like.scrapid = Scrap.Id上选择其中tbl_like.likestatus = 1和tbl_like.scrapid = ???“ – Arbaaz 2013-02-12 11:21:07

+0

查看我的编辑 – gzaxx 2013-02-12 11:31:46

+0

我创建的网站没有像fb这样的评论,它只是像orkut这样的个人剪贴簿,问题是我不知道如何显示喜欢的数字,因为在tbl_like内部连接中选择COUNT(*)tbl_like.scrapid = Scrap.Id其中tbl_like .likestatus = 1和tbl_like.scrapid = 23(如果我使用它,它将只返回scrapid = 23的喜欢数)并且每一行都会有相同的答案谢谢你的努力btw – Arbaaz 2013-02-12 11:40:38