2017-07-04 61 views
0

嗨,我有一個名爲ChatMessageBO的類,它具有Id,Msg,Name和Date等屬性。按日期多記錄顯示

我想顯示數據的日期。

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

這裏我得到所有數據正常,但我想顯示日期,然後名稱和味精。

例如

2017年3月7日

jaydeeep你好 仙人喜

2017年4月7日

NEHA神早上 jaydeep早上好所有

觀看側代碼 日期(這裏我需要幫助)03-june包含3條記錄,所以日期t母雞名稱,味精那麼04年6月含有4味精。

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

什麼樣的控件'MessageList'是?它是一個ListView,DataList,GridView,列表框? –

回答

0

您需要根據日期對來自數據庫的消息對象進行分組。 GroupBy LINQ的方法應該是有用的。

您需要做的下一件事就是使用適當的控件來顯示分組數據。 請考慮以下示例。

我有類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對象的列表並將其綁定到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(); 
     } 
    } 
} 

這樣你就可以按照你想要的方式顯示數據。