您需要根據日期對來自數據庫的消息對象進行分組。 GroupBy
LINQ的方法應該是有用的。
您需要做的下一件事就是使用適當的控件來顯示分組數據。 請考慮以下示例。
我有類ChatMessage
和MessageGroup
。 ChatMessage
是一個簡單的類,具有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
對象的列表並將其綁定到DataList。
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綁定到MessageGroup
實例的Messages
屬性。
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();
}
}
}
這樣你就可以按照你想要的方式顯示數據。
什麼樣的控件'MessageList'是?它是一個ListView,DataList,GridView,列表框? –