1

我正在创建一个大学网站,它有点像社交网站,人们可以在彼此的墙上张贴碎片。我想在每个剪贴簿留言中包含喜欢/不喜欢或投票赞成/否决。我创建了这张名为 tbl_like 的表...

点赞 | 废料 ID | FromId | 喜欢状态 | 时间

报废表:ScrapId | FromId | toId |消息 | 发送日期

接下来我该怎么做?

<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();
        }

    }
4

1 回答 1

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,它应该可以正常工作

于 2013-02-12T10:36:06.977 回答