使用C#

时间:2016-05-01 13:49:12

标签: c# asp.net sql-server

我想为我的个人网站写评论部分,我希望用户可以根据需要重播特定评论..并且重播必须低于他们回答的评论。 我使用转发器控制器,这是我的代码:

 <asp:Repeater ID="rptComments" runat="server" OnItemCommand="rptComments_ItemCommand">
                <ItemTemplate>
                    <div class="media comment text-right" runat="server" visible='<%# Convert.ToBoolean(Eval("CommentIsReplay")) == false %>'>
                        <div class="media-body">
                            <h4>
                                <asp:Literal ID="lblCommentAuthorName" Text='<%# Eval("CommentAuthorName") %>' runat="server"></asp:Literal></h4>
                            <span>
                                <asp:Label ID="lblCommentDate_FA" Text='<%# Eval("CommentDate_FA") %>' runat="server"></asp:Label></span>
                            <p>
                                <asp:Literal ID="lblCOmmentText" Text='<%# Eval("COmmentText") %>' runat="server"></asp:Literal>
                            </p>
                        </div>
                        <div class="media-bottom clearfix">
                            <asp:Button ID="Button1" runat="server"
                                Text="Replay"
                                CommandName="getCommentCode"
                                CommandArgument='<%#DataBinder.Eval(Container.DataItem,"CommentCode") %>'
                                CssClass="btn btn-default pull-left" Style="max-width: 20%;" />
                        </div>
                    </div>
                    <div class="media comment text-right commentReplay" runat="server" visible='<%# Convert.ToBoolean(Eval("CommentIsReplay")) == true %>'>
                        <div class="media-body">
                            <h4>
                                <asp:Literal ID="Literal1" Text='<%# Eval("CommentAuthorName") %>' runat="server"></asp:Literal></h4>

                            <p>
                                <asp:Literal ID="Literal2" Text='<%# Eval("COmmentText") %>' runat="server"></asp:Literal>
                            </p>
                        </div>
                        <div class="media-bottom clearfix">
                            <asp:Button ID="Button2" runat="server"
                                Text="Replay"
                                CommandName="getCommentCode"
                                CommandArgument='<%#DataBinder.Eval(Container.DataItem,"CommentCode") %>'
                                CssClass="btn btn-default pull-left" Style="max-width: 20%;" />
                        </div>
                    </div>
                </ItemTemplate>

正如你所看到的,我写了2节并检查行以了解什么评论是重播类型和谁不是.. 我存储评论代码用于重播和一个字段来检查是否重播...

我的问题是我如何使用此代码重新排序行。 感谢

2 个答案:

答案 0 :(得分:1)

所以,我实现了嵌套的中继器,它运行良好。在这里你可以查看代码...

主Repeater使用Post外键从Comments Table中检索数据。第二个中继器检查表找到的是父ID有任何childern?以及它与OnItemDataBound的合作。

 <asp:repeater id="rptComments" runat="server" onitemcommand="rptComments_ItemCommand" onitemdatabound="rptComments_ItemDataBound">
                <ItemTemplate>
                    <div class="media comment text-right" runat="server" >
                        <div class="media-body">
                            <h4>
                                <asp:Literal ID="lblCommentAuthorName" Text='<%# Eval("CommentAuthorName") %>' runat="server"></asp:Literal></h4>
                            <span>
                                <asp:Label ID="lblCommentDate_FA" Text='<%# Eval("CommentDate_FA") %>' runat="server"></asp:Label></span>
                            <p>
                                <asp:Literal ID="lblCOmmentText" Text='<%# Eval("COmmentText") %>' runat="server"></asp:Literal>
                            </p>
                        </div>
                        <div class="media-bottom clearfix">
                            <asp:Button ID="Button1" runat="server"
                                Text="Replay"
                                CommandName="getCommentCode"
                                CommandArgument='<%#DataBinder.Eval(Container.DataItem,"CommentCode") %>'
                                CssClass="btn btn-default pull-left" Style="max-width: 20%;" />
                        </div>
                    </div>

                    <asp:Repeater ID="rptReplay" runat="server" onitemcommand="rptComments_ItemCommand">
                        <ItemTemplate>
                            <div class="media comment text-right commentReplay" runat="server">
                                <div class="media-body">
                                    <h4>
                                        <asp:Literal ID="Literal1" Text='<%# Eval("CommentAuthorName") %>' runat="server"></asp:Literal></h4>
                                     <span>
                                <asp:Label ID="Label1" Text='<%# Eval("CommentDate_FA") %>' runat="server"></asp:Label></span>

                                    <p>
                                        <asp:Literal ID="Literal2" Text='<%# Eval("COmmentText") %>' runat="server"></asp:Literal>
                                    </p>
                                </div>
                                <div class="media-bottom clearfix">
                                    <asp:Button ID="Button2" runat="server"
                                        Text="Replay"
                                        CommandName="getCommentCodeParent"
                                        CommandArgument='<%#DataBinder.Eval(Container.DataItem,"CommentCode") %>'
                                        CssClass="btn btn-default pull-left" Style="max-width: 20%;" />
                                </div>
                            </div>
                        </ItemTemplate>
                    </asp:Repeater>
                </ItemTemplate>
            </asp:repeater>

和代码背后:

    protected void rptComments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        TblComment item = (TblComment)(e.Item.DataItem);
        Int32 code = Convert.ToInt32(item.CommentCode);


        var replay = (from a in db.TblComments
                      where a.CommentReplayTo == code && a.CommentIsReplay == true && a.CommentIsApprove == true
                      select a).ToList();



        Repeater rptReplay = (Repeater)e.Item.FindControl("rptReplay");
        rptReplay.DataSource = replay;
        rptReplay.DataBind();
       }
}

我希望将来帮助某人..
感谢

答案 1 :(得分:0)

这是我实施的解决方案。首先我使用了一个datalist并在其中使用了另一个datalist(我的猜测是转发器应该也能正常工作)。我的表格中有一个名为parent commentid的列。如果这是零,那么它是一个新的评论或如果有人回复评论,这将保存与parrent评论ID中的原始评论ID。然后在外部数据主义者的itemdatabound事件中,我将查询数据库中所有注释,其中包含父标志字段中当前注释的id,并将其绑定到内部数据列表 -