2017-07-04 9 views
0

こんにちは私はId、Msg、名前、日付などのプロパティを持つChatMessageBOというクラスを持っています。datewise multiple record display

データを日付で表示します。

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

ここで私はすべてのデータを正しく取得していますが、日付を表示してから名前とmsgを表示します。

2017年3月7日

jaydeeepハロー リシHI

2017年4月7日

ネハ神おはよう jaydeep良いmoring全て

ビュー側コード 日付(ここで私は助けが必要です)03-juneには3つのレコードが含まれていますので、date t hen name、msg then 04 juneには4 msgが含まれています。

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

どのような種類のコントロール 'MessageList'がありますか?それはListView、DataList、GridView、ListBoxですか? –

答えて

0

データベースからのメッセージオブジェクトを日付でグループ化する必要があります。 GroupBy LINQの方法は便利です。

次に、適切なコントロールを使用してグループ化されたデータを表示するだけです。 次の例を検討してください。

私はクラスChatMessageMessageGroupです。 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(); 
     } 
    } 
} 

この方法で、必要な方法でデータを表示できます。