2013-02-12 13 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