Dear All
I have created a ListView to display items from a SharePoint list:
<asp:ListView ID="UpAndComingEventsLV" runat="server"><LayoutTemplate><ul><li id="itemPlaceholder" runat="server" /></ul></LayoutTemplate><ItemTemplate><li id="Li1" runat="server"><asp:Literal ID="CurrentDate" runat="server" /><%#Eval("Title")%> <%#Eval("Event_x0020_Category")%> <%#Eval("EventDate", "{0:HH:mm}")%></li></ItemTemplate></asp:ListView>To perform the binding and then display the date I'm doing the following:
Using oSiteCollection As New SPSite(_ListPath)
Using web As SPWeb = oSiteCollection.OpenWeb()
List = web.GetList(_ListPath)
End Using
End Using
Dim Query As New SPQuery
Query.Query = "<Where><And><Eq><FieldRef Name='Status' /><Value Type='Choice'>Approved</Value></Eq><Geq><FieldRef Name='EventDate' /><Value Type='DateTime'><Today Offset='4' /></Value></Geq></And></Where><OrderBy><FieldRef Name='EventDate' /></OrderBy>"
'Query.RowLimit = 1
Query.ViewFields = "<FieldRef Name='Event_x0020_Category' /><FieldRef Name='Title' /><FieldRef Name='EventDate' /></ViewFields>"
Dim ItemColl As SPListItemCollection = List.GetItems(Query)
UpAndComingEventsLV.DataSource = ItemColl.GetDataTable
UpAndComingEventsLV.DataBind()dfgdfgfg
I would like to group my events by date though, rather than display the date against each row. To make things even more complicated, I would like to use friendly names like Today, Tomorrow, Monday, Tuesday instead of dates:
TODAY
- Event number one
- Event number two
- Event number three
TOMORROW
- Event number 4
- Event number 5
MONDAY
- Event number 6
- Event number 7
At the moment, I've created a ItemDataBound event on the ListView control and I have been able to display the Today, Tomorrow, Monday etc bit but I can't figure out the best way to perform the grouping. Incidentally, I only want to group on the date not on time:
Private Sub UpAndComingEventsLV_ItemDataBound(sender As Object, e As Web.UI.WebControls.ListViewItemEventArgs) Handles UpAndComingEventsLV.ItemDataBound
If e.Item.ItemType = Web.UI.WebControls.ListViewItemType.DataItem Then
'Retrieve data item
Dim DataItem As ListViewDataItem = DirectCast(e.Item, ListViewDataItem)
Dim RowView As DataRowView = DirectCast(DataItem.DataItem, DataRowView)
Dim EventDate As DateTime = RowView("EventDate")
'Get literal control
Dim CurrentDate As Literal = e.Item.FindControl("CurrentDate")
'Display friendly date
If Not IsNothing(CurrentDate) Then
Select Case EventDate.Date
Case Is = Now.Date
CurrentDate.Text = "Today"
Case Is = Now.Date.AddDays(1)
CurrentDate.Text = "Tomorrow"
Case Is = Now.Date.AddDays(2)
CurrentDate.Text = Now.Date.AddDays(2).DayOfWeek.ToString
Case Is = Now.Date.AddDays(3)
CurrentDate.Text = Now.Date.AddDays(3).DayOfWeek.ToString
Case Is = Now.Date.AddDays(4)
CurrentDate.Text = Now.Date.AddDays(4).DayOfWeek.ToString
Case Is = Now.Date.AddDays(5)
CurrentDate.Text = Now.Date.AddDays(5).DayOfWeek.ToString
Case Is = Now.Date.AddDays(6)
CurrentDate.Text = Now.Date.AddDays(6).DayOfWeek.ToString
End Select
Else
CurrentDate.Text = "-"
End If
End If
End SubPlease could you help me understand the best way to perform the grouping by date?
Any help or advice is greatly appreciated!
Many thanks
Daniel