日期多记录显示

时间:2017-07-04 10:25:54

标签: asp.net webforms

您好我有一个名为ChatMessageBO的类,它具有Id,Msg,Name和date等属性。

我想在日期显示数据。

List<chatmessagebo> SortedList = directChatWindow.messages.OrderBy(o => o.ts).ToList();
MessageList.DataSource = SortedList; 
MessageList.DataBind(); 

这里我可以正确获取所有数据,但我想显示日期,然后显示姓名和信息。

例如

2017年3月7日

jaydeeep你好 rishi hi

2017年4月7日

neha god mornin jaydeep好早上好

查看旁边代码 date(这里我需要帮助)03-june包含3条记录,所以date然后是name,msg然后04 june包含4 msg。

'<%#Eval("name")%><%#Eval("msg")%>'

1 个答案:

答案 0 :(得分:0)

您需要按日期对来自数据库的消息对象进行分组。 LINQ的GroupBy方法应该很有用。

接下来您需要做的是使用适当的控件来显示分组数据。 请考虑以下示例。

我有课程ChatMessageMessageGroupChatMessage是一个简单的类,具有Id,Name,Message和Date属性。 MessageGroup表示以日期为分组因子的邮件组。

public class ChatMessage
{
    public int Id { get; set; }

    public string Message { get; set; }

    public string Name { get; set; }

    public DateTime Date { get; set; }
}

public class MessageGroup
{
    public DateTime Date { get; set; }

    public List<ChatMessage> Messages { get; set; }
}

我在这里使用asp:DataList控件来显示消息。

<asp:DataList ID="messageList" runat="server" OnItemDataBound="messageList_ItemDataBound" >
    <ItemTemplate>
        <table>
            <tr>
                <td>
                    <!--Displaying date first -->
                    <span><%# Eval("Date") %></span>
                </td>
                <td>
                    <!-- Inner DataList to display grouped messages-->
                    <asp:DataList ID="subMessageList" runat ="server">
                        <ItemTemplate>
                            <span><%# Eval("Name") %> : <%# Eval("Message") %></span>
                        </ItemTemplate>
                    </asp:DataList>
                </td>
            </tr>

            </table>
    </ItemTemplate>
</asp:DataList>

以下是按日期对邮件进行分组并创建MessageGroup个对象列表并将其绑定到数据列表的方法。

private void DisplayMessages()
{
    var messages = directChatWindow.messages.OrderBy(o => o.ts).ToList();

    var list = messages.GroupBy(msg => msg.Date).Select(grp => new MessageGroup { Date = grp.Key, Messages = grp.ToList() });

    messageList.DataSource = list;
    messageList.DataBind();
}

在页面加载中调用此方法。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DisplayMessages();
    }
}

此代码仅显示DataList中的日期。要在内部数据列表中显示消息,我们需要处理主数据列表的ItemDataBound事件。 在这种情况下,我们将获取绑定到DataList的当前Item的当前DataItem。此DataItem是MessageGroup的对象。我们将内部DataList绑定到Messages实例的MessageGroup属性。

protected void messageList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    var messageGroup = e.Item.DataItem as MessageGroup;

    if(messageGroup != null)
    {
        var subList = e.Item.FindControl("subMessageList") as DataList;

        if(subList != null)
        {
            subList.DataSource = messageGroup.Messages;
            subList.DataBind();
        }
    }
}

这样您就可以按照自己的方式显示数据。