2013-02-12 9 views
1

Я создаю веб-сайт колледжа, который в некоторой степени похож на сайты социальных сетей, которые люди могут публиковать обрывки друг на друга. Я хочу включить Like/unlike или голосовать/голосовать на каждом ломе. Я создал эту таблицу под названием 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 должен быть идентификатор элемента, который должен быть обновлен, как/в отличие от статуса.


я очистить ваш 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 к комментариюCount и он должен работать нормально

+0

Как я могу отображать количество понравившихся на каждый лом? выберите COUNT (*) из tbl_like внутреннего соединения Scrap на tbl_like.scrapid = Scrap.Id где tbl_like.likestatus = 1 и tbl_like.scrapid = ??? " – Arbaaz

+0

Посмотрите на мое редактирование – gzaxx

+0

На сайте, который я создаю, нет комментарии как fb, у него просто отдельные обрывки, такие как orkut. Проблема в том, что я не знаю, как отображать количество понравившихся, потому что в select COUNT (*) из tbl_like внутреннего соединения Scrap на tbl_like.scrapid = Scrap.Id где tbl_like .likestatus = 1 и tbl_like.scrapid = 23 (если я использую это, он вернет только количество симпатичных для scrapid = 23) И каждая строка будет иметь тот же ответ. Спасибо за ваши усилия. btw – Arbaaz