データベースからのメッセージオブジェクトを日付でグループ化する必要があります。 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
オブジェクトのリストを作成し、データリストにそれを結合。
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();
}
}
このコードでは、データリストに日付のみが表示されます。内部データリストにメッセージを表示するには、メインデータリストのItemDataBound
イベントを処理する必要があります。 このイベントでは、現在のDataItemをDataListの現在のItemにバインドします。この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、ListBoxですか? –