1-888-365-2779
+1-888-365-2779
Try Now
More in this section

Forums / Developing with Sitefinity / Filtering the EVENTS Module

Filtering the EVENTS Module

5 posts, 0 answered
  1. Rajeev
    Rajeev avatar
    3 posts
    Registered:
    30 Nov 2012
    14 Dec 2012
    Link to this post
    We just bought this CMS software. I am pretty new to the API. I have gone thru some documentation on the wesbite searching for my answers. Well i am still searching!!!. My question is regarding filtering by Category, Tags, start Date and End Date in the Events Module.

    I am using Sitefinity 5.1

    For example I have created  Three Events. (Event1, Event2, Event3)
    Event1 has a Category as CityA and Tags as Kids, Teens.
    Event2 has a Category as CityB  and Tags as Kids, Adults.
    Event3 has a Category as CityC, and Tags as Teens, Adults.

    I want filter the results based upon categories, tags and dates selected.
    So i created 2 RadListBox with check boxes of Tags and Categories, and two RadDatePicker for the dates.

     So how do i show all the Events based upon different Categories and Tags with start date and End Date ?  The user can select Multiple Categories and multiple Tags.  I want the result set to bind to a RadListView

    I have made the ASCX page with the controls.  I also tried to use the IMetaSearchInfo which is not working. I don't know what namespaces i need.

    I also hard coded the Tags and Categories in the RadListBox with check boxes.
     IS there any other way that i can automatically populate the RadListBox using the API without hard coding the tags and categories?

    Here is MY ASCX Code

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Events.ascx.cs" Inherits="SitefinityWebApp.UserControls.Events" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
    <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="true" />
    <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All"
        EnableRoundedCorners="false" />
    <label for="NamesDDL">
        Select contact name to view its product orders:</label>
    <div style="margin-top: 15px;">
        <table>
            <tr>
                <td>
                    Categories
                </td>
                <td>
                    Location
                </td>
                <td>
                    Start Date
                </td>
                <td>
                    End Date
                </td>
            </tr>
            <tr>
                <td>


     
        <telerik:RadListBox ID="RadListBox1" runat="server" CheckBoxes="true" Width="120px"
                    Height="100px">
                    <Items>
                        <telerik:RadListBoxItem Text="Kids"></telerik:RadListBoxItem>
                        <telerik:RadListBoxItem Text="Adult"></telerik:RadListBoxItem>
                        <telerik:RadListBoxItem Text="Teens"></telerik:RadListBoxItem>
                    </Items>
                </telerik:RadListBox>


              
                   
                </td>
                <td>

                <telerik:RadListBox ID="RadListBox2" runat="server" CheckBoxes="true" Height="100"  Width="120px">
                    <Items>
                        <telerik:RadListBoxItem Text="CityA"></telerik:RadListBoxItem>
                        <telerik:RadListBoxItem Text="CityB"></telerik:RadListBoxItem>
                        <telerik:RadListBoxItem Text="CittyC"></telerik:RadListBoxItem>
                    </Items>
                </telerik:RadListBox>
                  
                </td>
                <td>
                    <telerik:RadDatePicker ID="RadDatePicker1" runat="server">
                        <Calendar ID="Calendar1" runat="server" EnableKeyboardNavigation="true">
                        </Calendar>
                        <DateInput ID="DateInput2" ToolTip="Date input" runat="server">
                        </DateInput>
                    </telerik:RadDatePicker>
                </td>
                <td>
                    <telerik:RadDatePicker ID="RadDatePicker2" runat="server">
                        <Calendar ID="Calendar2" runat="server" EnableKeyboardNavigation="true">
                        </Calendar>
                        <DateInput ID="DateInput1" ToolTip="Date input" runat="server">
                        </DateInput>
                    </telerik:RadDatePicker>
                    <telerik:RadButton ID="Submit" runat="server" Text="Search" OnClick="Submit_Click">
                    </telerik:RadButton>
                </td>
            </tr>
        </table>
    </div>
    <div style="margin: 15px 0 20px;">
       <telerik:RadListView ID="RadListView1" DataSourceID="SqlDataSource1" runat="server"
            ItemPlaceholderID="EmployeesContainer" AllowPaging="True" PageSize=3>
            <LayoutTemplate>
                <fieldset style="width: 900px">
                    <legend>Events</legend>
                    <asp:PlaceHolder ID="EmployeesContainer" runat="server"></asp:PlaceHolder>
                </fieldset>
            </LayoutTemplate>
            <ItemTemplate>
                <fieldset style="float: left; width: 420px;">
                    <legend>Company:
                                <%#Eval("Title")%>
                    </legend>
                    <table cellpadding="0" cellspacing="0">
                        <tr>
                            <td>
                                <table cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td style="width: 25%">Location:
                                        </td>
                                        <td style="width: 50%">
                                            <%#Eval("Location")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Address:
                                        </td>
                                        <td>
                                            <%#Eval("Address")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Contact:
                                        </td>
                                        <td>
                                            <%# Eval("Contact")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Email:
                                        </td>
                                        <td>
                                            <%# Eval("Email")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Website:
                                        </td>
                                        <td>
                                            <%# Eval("Website")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Phone:
                                        </td>
                                        <td>
                                            <%#Eval("Phone")%>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                            <td align="right" style="width: 25%; padding-left: 10px;">
                                <telerik:RadBinaryImage ID="RadBinaryImage1" runat="server" AlternateText="Contact Photo"
                                    ToolTip="Contact Photo" Width="90px" Height="110px" ResizeMode="Fit" DataValue='<%# Eval("Photo") %>'>
                                </telerik:RadBinaryImage>
                            </td>
                        </tr>
                    </table>
                </fieldset>
            </ItemTemplate>
            <AlternatingItemTemplate>
                <fieldset style="float: left; width: 420px;">
                    <legend>Company:
                                <%#Eval("CompanyName")%>
                    </legend>
                    <table cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td style="width: 25%">Location:
                                        </td>
                                        <td style="width: 50%">
                                            <%#Eval("Location")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Address:
                                        </td>
                                        <td>
                                            <%#Eval("Address")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Contact:
                                        </td>
                                        <td>
                                            <%# Eval("Contact")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Email:
                                        </td>
                                        <td>
                                            <%# Eval("Email")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Website:
                                        </td>
                                        <td>
                                            <%# Eval("Website")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Phone:
                                        </td>
                                        <td>
                                            <%#Eval("Phone")%>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                            <td align="right" style="width: 25%; padding-left: 10px;">
                                <telerik:RadBinaryImage ID="RadBinaryImage1" runat="server" AlternateText="Contact Photo"
                                    ToolTip="Contact Photo" Width="90px" Height="110px" ResizeMode="Fit" DataValue='<%# Eval("Photo") %>'>
                                </telerik:RadBinaryImage>
                            </td>
                        </tr>
                    </table>
                </fieldset>
            </AlternatingItemTemplate>
        </telerik:RadListView>
    </div>




    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnableAJAX="true" DefaultLoadingPanelID="RadAjaxLoadingPanel1">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="NamesDDL">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="EventsGrid" LoadingPanelID="AjaxLoadingPanel1">
                    </telerik:AjaxUpdatedControl>
                    <telerik:AjaxUpdatedControl ControlID="NamesDDL"></telerik:AjaxUpdatedControl>
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
    </telerik:RadAjaxLoadingPanel>
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Here is my Code Behind

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Telerik.Sitefinity;
    using Telerik.Sitefinity.GenericContent.Model;
    using Telerik.Web.UI;
    using System.ComponentModel;
    using Telerik.Sitefinity.Web.DataResolving;
    using Telerik.Sitefinity.Pages.Model;
    using Telerik.Sitefinity.Events.Model;
    using Telerik.Sitefinity.Modules.Events;
    using Telerik.Sitefinity.Model;

    using Telerik.Sitefinity.Workflow;
    using System.Collections;
    using System.Text;
    using Telerik.OpenAccess;








    namespace SitefinityWebApp.UserControls
    {
        public partial class Events : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }





            protected void Submit_Click(object sender, EventArgs e)
            {



                StringBuilder sb = new StringBuilder();
                IList<RadListBoxItem> collection = RadListBox1.CheckedItems;
                foreach (RadListBoxItem item in collection)
                {
                    sb.Append(item.Value + ",");
                }

                String Catg;
                Catg = sb.ToString();


                StringBuilder sbTag = new StringBuilder();
                IList<RadListBoxItem> collectionTag = RadListBox1.CheckedItems;
                foreach (RadListBoxItem item in collectionTag)
                {
                    sbTag.Append(item.Value + ",");
                }

                String Tags;
                Tags = sbTag.ToString();

                // new instance of eventsManager
                EventsManager eventsManager = new EventsManager("Events");


                //create a filer  
                List<IMetaSearchInfo> filter = new List<IMetaSearchInfo>();
                filter.Add(new MetaSearchInfo(MetaValueTypes.ShortText, "Category", Catg, SearchCondition.Equal, JoinType.And));
                filter.Add(new MetaSearchInfo(MetaValueTypes.ShortText, "Tags", Tags, SearchCondition.Equal, JoinType.And));
                filter.Add(new MetaSearchInfo(MetaValueTypes.ShortText, "Event_Start", RadDatePicker1.SelectedDate.Value.ToShortDateString(), SearchCondition.Equal, JoinType.And));
                filter.Add(new MetaSearchInfo(MetaValueTypes.ShortText, "Event_End", RadDatePicker2.SelectedDate.Value.ToShortDateString(), SearchCondition.Equal, JoinType.And));

                // get all events
                IList listOfAllEvents = eventsManager.Content.GetContent(0, 0, string.Empty, null, string.Empty, null, filter.ToArray());

                // foreach (IContent eventItem in listOfAllEvents)
                //   Response.Write(eventItem.GetMetaData("Title").ToString() + "<br />");

                RadListView1.DataSource = listOfAllEvents.ToString();
                RadListView1.DataBind();


                // filterBuilder.AddFilter(new ContentFilterStatement("Tag.Name", tag.TagName, ContentFilter.Condition.Equal, ContentFilter.JoinType.And));

            }


        }
    }

  2. Alon Rotem
    Alon Rotem avatar
    26 posts
    Registered:
    29 Feb 2016
    20 Dec 2012
    Link to this post
    Hello Rajeev,

    First off, I'd like to refer you to Sitefinity's Developer's Guide. There you may find many references on how to use Sitefinity's components, managers, providers and content items (see some links I've included in the answer below).

    For example, here is an article which shows how to correctly use EventsManager in order to retrieve events, and here is the documentation page about Events.
    If you build your page/control with some powerful code-behind you may be get more flexibility and power, for example you may want to use Sitefinity's convenient, yet powerful, Fluent API.

    To help you with your current attempt, I've produced an alternative to your code (it in a regular webform .aspx. You could, of course, wrap the code as a user-control, add it to the regular page's toolbox and then simply drag and drop it directly on a page with Sitefinity's page editor).

    Here is the apsx client site markup, and some comments below it:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EventsPage1.aspx.cs" Inherits="SitefinityWebApp.EventsPage" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <!DOCTYPE html>
     
    <head runat="server">
         
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
            <table>
                        <tr>
                <td>
                    Categories
                </td>
                <td>
                    Location
                </td>
                <td>
                    Start Date
                </td>
                <td>
                    End Date
                </td>
            </tr>
                <tr>
                    <td>
                        <asp:DropDownList ID="categorySelector" runat="server"/>
                    </td>
                    <td>
                        <asp:DropDownList ID="citySelector" runat="server"/>
                    </td>
                <td>
                    <telerik:RadDatePicker ID="RadDatePicker1" runat="server">
                        <Calendar ID="Calendar1" runat="server" EnableKeyboardNavigation="true">
                        </Calendar>
                        <DateInput ID="DateInput2" ToolTip="Date input" runat="server">
                        </DateInput>
                    </telerik:RadDatePicker>
                </td>
                <td>
                    <telerik:RadDatePicker ID="RadDatePicker2" runat="server">
                        <Calendar ID="Calendar2" runat="server" EnableKeyboardNavigation="true"/>
                        <DateInput ID="DateInput1" ToolTip="Date input" runat="server"/>
                    </telerik:RadDatePicker>
                    <telerik:RadButton ID="Submit" runat="server" Text="Search"/>
                </td>
               </tr>
            </table>
     
            <telerik:RadListView ID="RadListView1" runat="server" AllowPaging="True" PageSize=3 ItemPlaceholderID="EmployeesContainer">
                <LayoutTemplate>
                <fieldset style="width: 900px">
                    <legend>Events</legend>
                    <asp:PlaceHolder ID="EmployeesContainer" runat="server"/>
                </fieldset>
            </LayoutTemplate>
            <ItemTemplate>
                <fieldset style="float: left; width: 420px;">
                    <legend>Company:
                                <%#Eval("Title")%>
                    </legend>
                    <table cellpadding="0" cellspacing="0">
                        <tr>
                            <td>
                                <table cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td style="width: 25%">Location:
                                        </td>
                                        <td style="width: 50%">
                                            <%#Eval("City")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Address:
                                        </td>
                                        <td>
                                            <%#Eval("Street")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Contact:
                                        </td>
                                        <td>
                                            <%# Eval("ContactName")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Email:
                                        </td>
                                        <td>
                                            <%# Eval("ContactEmail")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Website:
                                        </td>
                                        <td>
                                            <%# Eval("ContactWeb")%>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>Phone:
                                        </td>
                                        <td>
                                            <%#Eval("ContactPhone")%>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                    </table>
                </fieldset>
            </ItemTemplate>
            </telerik:RadListView>
        </form>
    </body>
    </html>

    Note the following:

    • My page uses regular ASP.NET drop-down lists. Those are populated dynamically by querying some data from Sitefinity's content (see the code to learn how), and not statically hard-coded in the markup.
    • I use the same DatePickers you used, and slightly simpler RadListView, based on your HTML markup.

    My server side code-behind:

    using System;
    using System.Linq;
    using Telerik.Sitefinity.Events.Model;
    using Telerik.Sitefinity.GenericContent.Model;
    using Telerik.Sitefinity.Modules.Events;
    using Telerik.Sitefinity.Taxonomies;
     
    namespace SitefinityWebApp
    {
        public partial class EventsPage : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    TaxonomyManager taxMan = TaxonomyManager.GetManager();
                    var categories = taxMan.GetTaxonomy(TaxonomyManager.CategoriesTaxonomyId).Taxa;
                    categorySelector.DataValueField = "Id";
                    categorySelector.DataTextField = "Title";
                    categorySelector.DataSource = categories;
                    categorySelector.DataBind();
     
                    EventsManager eventsMan = EventsManager.GetManager();
                    var cities = eventsMan.GetEvents().Select(evt => evt.City.ToString()).ToList().Distinct();
                    citySelector.DataSource = cities;
                    citySelector.DataBind();
     
                }
                Submit.Click += Submit_Click;
            }
     
            void Submit_Click(object sender, EventArgs e)
            {
                EventsManager eventsMan = EventsManager.GetManager();
     
                int? totalcount = -1;
                var categoryId = categorySelector.Items[categorySelector.SelectedIndex].Value;
                string city = citySelector.Items[citySelector.SelectedIndex].Value;
     
                IQueryable<Event> events = null;
     
                if (!categoryId.IsNullOrWhitespace())
                {
                    events = eventsMan.Provider.GetItemsByTaxon(
                        new Guid(categoryId),
                        false,
                        "Category",
                        typeof(Event),
                        "Status = Master", "",
                        RadListView1.PageSize * RadListView1.CurrentPageIndex,
                        RadListView1.PageSize, ref totalcount).Cast<Event>().AsQueryable();
                }
                else
                {
                    events = eventsMan.GetEvents()
                        .Where(evt => evt.Status == ContentLifecycleStatus.Master)
                        .Skip(RadListView1.PageSize * RadListView1.CurrentPageIndex)
                        .Take(RadListView1.PageSize);
                }
     
                if (!city.IsNullOrWhitespace())
                    events = events.Where(evt => evt.City == city);
     
                if (RadDatePicker1.SelectedDate != null)
                    events = events.Where(evt => evt.EventStart >= RadDatePicker1.SelectedDate);
     
                if(RadDatePicker2.SelectedDate != null)
                    events = events.Where(evt => evt.EventStart <= RadDatePicker2.SelectedDate);
     
                RadListView1.DataSource = events;
                RadListView1.DataBind();
     
            }
        }
    }

    Note:

    • On the Page_Load event handler I populate the categories and location drop-downs.
      The categories selector is populated with all the categories defined in the system.
      Notice how I retrieve the manager by using the manager's static GetManager method, and not by instantiating it myself with a constructor.
      The location drop-down is populated with all the city locations which are included in any of the current events in the system.
    • I hook the submit button's click event on the server side. This does not matter, you may still hook the handler via the markup if you like.
    • On the click event, I retrieve events as a queryable collection, using the EventsManager. Notice there's a difference if you wish to retrieve events by a specific category or uncategorized directly.
      To control categories / tags I refer you to the Taxonomies documentation.
    • Note I retrieve events which are of status Master. I refer you here to documentation about lifecycle in Sitefinity, to understand how it works and differentiates items by their publication status.
    • I also set the current page of items by getting the page-size and current page number from the RadListView.
    • Then Add filters by city and make sure the event's start date is between the 2 date selectors (You may, of course, add more filters as you wish or change the current implementation to select only events with explicit start and end dates as selected).
    • The last part is simply binding the RadListView with the final queryable results.

    I hope you find this information helpful in order to progress with your development.


    Regards,
    Alon Rotem
    the Telerik team
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Rajeev
    Rajeev avatar
    3 posts
    Registered:
    30 Nov 2012
    02 Jan 2013 in reply to Alon Rotem
    Link to this post
    Thanks for your help. I am kind of stuck on Two things. I did some
    changes to the previous code.

    1. Instead of Categories i am using TAGS. 
    2. Now i am populating the Listbox in the Page_Init. 
    3. Now i am using the Radlistview like this

      http://demos.telerik.com/aspnet-ajax/listview/examples/appearancestyling/customlayouts/defaultcs.aspx
    4. I have added the telerik:RadDataPager.
    5. I call the LoadData to load the values of the Listboxes. 
    6.  I also changed

      RadListView1.PageSize * RadListView1.CurrentPageIndex,

      RadListView1.PageSize, ref totalCount).Cast<Event>().AsQueryable();to this

      0, 100, ref totalCount).Cast<Event>().AsQueryable();


           My questions          


    1) I implemented the telerik:RadDataPager. The Pager works fine for the
    first set of records. When i click NEXT no records are displayed and RadDataPager also disappears.
     I tried to Rebind the Listview in PreRender but still it is not working.

     protected void RadListView1_PreRender(object sender, EventArgs e)
            {
                RadListView1.Rebind();
                LoadData();
            }

    2) My second question is  When ever the results come back the first result is always expanded. Which i don't want. I know you can control this in RadGrid with the Expandable column(RadGrid.ExpandCollapseCommandName). I am not able to do it in Radlistview.

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Events.ascx.cs" Inherits="SitefinityWebApp.UserControls.Events" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <head>
        <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
            <script type="text/javascript">
                function pageLoad(sender, args) {
                    var productsTable = $get("products");
                    var firstRow;
                    if (productsTable.tBodies) {
                        firstRow = productsTable.tBodies[0].rows[0];
                    }
                    else {
                        firstRow = productsTable.rows[0];
                    }
     
                    var expandImg = firstRow.cells[0].getElementsByTagName("IMG")[0];
     
                    if (expandImg.src.indexOf("Plus") > -1) {
                        toggleOrderDetails(expandImg);
                    }
                }
     
                function toggleOrderDetails(sender) {
                    var thisRow = sender.parentNode.parentNode;
                    var nextRow = getNextRowSibling(thisRow);
     
                    if (nextRow && nextRow.className == "orders") {
                        if (nextRow.style.display == "none") {
                            nextRow.style.display = "";
                            sender.src = sender.src.replace("Plus", "Minus");
                            thisRow.className = "expanded";
                        }
                        else {
                            nextRow.style.display = "none";
                            sender.src = sender.src.replace("Minus", "Plus");
                            thisRow.className = "";
                        }
                    }
                }
     
                function getNextRowSibling(row) {
                    var ret = row;
                    do {
                        ret = ret.nextSibling;
                    } while (ret && ret.tagName != "TR");
     
                    return ret;
                }
            </script>
        </telerik:RadCodeBlock>
        <style type="text/css">
            .wrapper
            {
                width: 608px;
                border: 1px solid #5D8CC9;
                font-family: "segoe ui" ,arial,sans-serif;
                font-size: 12px;
                line-height: 16px;
            }
             
            .products
            {
                empty-cells: show;
                table-layout: fixed;
                border-collapse: collapse;
                width: 100%;
            }
            .products th
            {
                background-color: #C3D8F1;
                padding: 5px;
                border-bottom: 1px solid #5D8CC9;
                color: #00156E;
                text-align: left;
                width: 130px;
            }
            .products td
            {
                border: 1px solid #D0D7E5;
                border-style: none none solid none;
                padding: 4px 7px 3px 7px;
            }
            .products th.expand, .products td.expand
            {
                width: 20px;
                padding: 0 0 0 3px;
            }
            .products tr td.expand
            {
                border-color: #ECF4FF;
            }
            .products tr.expanded td, .orders td.expand
            {
                background-color: #ECF4FF;
            }
            .products tr td.expand img
            {
                cursor: pointer;
            }
            .orders td
            {
                padding: 0;
                width: auto;
            }
            .orders table
            {
                table-layout: fixed;
                border-collapse: collapse;
                width: 100%;
            }
            .orders table td
            {
                width: 130px;
                padding: 4px 7px 3px 7px;
                padding: 3px 3px 3px 7px;
            }
             
            .orders table tr:last-child td
            {
                border-bottom: none;
            }
        </style>
    </head>
    <body>
        <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
        <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All"
            EnableRoundedCorners="false" />
        <div style="width: 610px;">
            <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="SushiPanel">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="SushiPanel" LoadingPanelID="RadAjaxLoadingPanel1">
                            </telerik:AjaxUpdatedControl>
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
            <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Black">
            </telerik:RadAjaxLoadingPanel>
         
                <div>
                    <table>
                        <tr>
                            <td>
                                Location
                            </td>
                            <td>
                                Event Type
                            </td>
                            <td>
                                Start Date
                            </td>
                            <td>
                                End Date
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <telerik:RadListBox ID="citySelector" runat="server">
                                </telerik:RadListBox>
                            </td>
                            <td>
                                <telerik:RadListBox ID="tagSelector" runat="server">
                                </telerik:RadListBox>
                            </td>
                            <td>
                                <telerik:RadDatePicker ID="RadDatePicker1" runat="server">
                                    <Calendar ID="Calendar1" runat="server" EnableKeyboardNavigation="true">
                                    </Calendar>
                                    <DateInput ID="DateInput2" ToolTip="Date input" runat="server">
                                    </DateInput>
                                </telerik:RadDatePicker>
                            </td>
                            <td>
                                <telerik:RadDatePicker ID="RadDatePicker2" runat="server">
                                    <Calendar ID="Calendar2" runat="server" EnableKeyboardNavigation="true" />
                                    <DateInput ID="DateInput1" ToolTip="Date input" runat="server" />
                                </telerik:RadDatePicker>
                                <telerik:RadButton ID="Submit" runat="server" Text="Search" OnClick="Submit_Click" />
                            </td>
                        </tr>
                    </table>
                    <br />
                    <br />
                    <br />
                    <telerik:RadListView ID="RadListView1" runat="server" ItemPlaceholderID="ProductTitlePlaceHolder"
                        AllowPaging="True">
                        <LayoutTemplate>
                         <fieldset style="width: 900px">
                        <legend>Events</legend>
                        <asp:PlaceHolder ID="EmployeesContainer" runat="server" />
                       
                    </fieldset>
                            <asp:Panel ID="HierarchyPanel" runat="server" CssClass="wrapper">
                                <table id="products" class="products">
                                    <thead>
                                        <tr>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr id="ProductTitlePlaceHolder" runat="server">
                                        </tr>
                                    </tbody>
                                </table>
                            </asp:Panel>
                             <table cellpadding="0" cellspacing="0" width="100%;" style="clear: both;">
                            <tr>
                                <td>
                                    <telerik:RadDataPager ID="RadDataPager1" runat="server" PagedControlID="RadListView1" OnPreRender="Pager_Pre"
                                        PageSize="2" Visible='<%# Container.PageCount != 1%>'>
                                        <Fields>
                                            <telerik:RadDataPagerButtonField FieldType="FirstPrev" />
                                            <telerik:RadDataPagerButtonField FieldType="Numeric" PageButtonCount="5" />
                                            <telerik:RadDataPagerButtonField FieldType="NextLast" />
                                           
                                            <telerik:RadDataPagerTemplatePageField>
                                                <PagerTemplate>
                                                    <div style="float: right">
                                                        <b>Items
                                                            <asp:Label runat="server" ID="CurrentPageLabel" Text="<%# Container.Owner.StartRowIndex+1%>" />
                                                            to
                                                            <asp:Label runat="server" ID="TotalPagesLabel" Text="<%# Container.Owner.TotalRowCount > (Container.Owner.StartRowIndex+Container.Owner.PageSize) ? Container.Owner.StartRowIndex+Container.Owner.PageSize : Container.Owner.TotalRowCount %>" />
                                                            of
                                                            <asp:Label runat="server" ID="TotalItemsLabel" Text="<%# Container.Owner.TotalRowCount%>" />
                                                            <br />
                                                        </b>
                                                    </div>
                                                </PagerTemplate>
                                            </telerik:RadDataPagerTemplatePageField>
                                        </Fields>
                                    </telerik:RadDataPager><br /><br />
                                </td>
                            </tr>
                        </table>
                        </LayoutTemplate>
                        <ItemTemplate>
                            <tr>
                                <td class="expand">
                                    <img src="../Images/Default%20Images/SinglePlus.gif" alt="Plus" onclick="toggleOrderDetails(this)" />
                                </td>
                                <td colspan="4">
                                    <b>Title:</b>   <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' /><br />
                                    <br />
                                </td>
                            </tr>
                            <tr class="orders" style="display: none;">
                                <td class="expand">
                                </td>
                                <td colspan="4">
                                    <telerik:RadListView ID="RadListView2" runat="server" ItemPlaceholderID="OrderDetailsPlaceHolder"
                                        EnableViewState="false">
                                        <LayoutTemplate>
                                            <table>
                                                <asp:PlaceHolder ID="OrderDetailsPlaceHolder" runat="server"></asp:PlaceHolder>
                                            </table>
                                        </LayoutTemplate>
                                        <ItemTemplate>
                                            <tr>
                                                <td>
                                                    <b>Date Start:</b>  
                                                    <%#Eval("EventStart")%>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>Date End</b>  
                                                    <%#Eval("EventEnd")%>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>Street</b>  
                                                    <%#Eval("Street")%>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>City:</b>  
                                                    <%# Eval("City") %>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>State</b>  
                                                    <%#Eval("State")%>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>Country:</b>  
                                                    <%# Eval("Country") %>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <b>Summary</b>  
                                                    <%#Eval("Summary")%>
                                                </td>
                                            </tr>
                                        </ItemTemplate>
                                    </telerik:RadListView>
                                </td>
                            </tr>
                        </ItemTemplate>
                    </telerik:RadListView>
                </div>
                </div>
    </body>


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Telerik.Sitefinity.Events.Model;
    using Telerik.Sitefinity.GenericContent.Model;
    using Telerik.Sitefinity.Modules.Events;
    using Telerik.Sitefinity.Taxonomies;
    using Telerik.Web.UI;
     
    namespace SitefinityWebApp.UserControls
    {
        public partial class Events : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
                
              
     
            }
     
     
            protected void Pager_Pre(object sender, System.EventArgs e)
            {
               // RadListView1.DataSource = Session["Event"];
               // RadListView1.DataBind();
                 
            }
     
     
     
            protected void Page_Init(object sender, System.EventArgs e)
            {
                LoadData();
            }
     
            protected void LoadData()
            {
     
                TaxonomyManager taxMan = TaxonomyManager.GetManager();
                var tags = taxMan.GetTaxonomy(TaxonomyManager.TagsTaxonomyId).Taxa;
                tagSelector.DataTextField = "Title";
                tagSelector.DataValueField = "Id";
                tagSelector.DataSource = tags;
                tagSelector.DataBind();
     
     
     
                EventsManager eventsMan = EventsManager.GetManager();
                var cities = eventsMan.GetEvents().Select(evt => evt.City.ToString()).ToList().Distinct();
                citySelector.DataSource = cities;
                citySelector.DataBind();
     
            }
     
     
            
     
     
     
     
     
            protected void Submit_Click(object sender, EventArgs e)
            {
                EventsManager eventsMan = EventsManager.GetManager();
     
      
     
     
                string tagId;
     
                if (tagSelector.SelectedIndex == -1)
                {
     
                    tagId = "";
                }
                else
                {
                    tagId = tagSelector.SelectedValue;
                }
     
     
                string city;
                if (citySelector.SelectedIndex == -1)
                {
     
                    city = "";
                }
                else
                {
                    city = citySelector.SelectedItem.Text;
                }
     
                int? totalCount = -1;
                IQueryable<Event> events = null;
     
                if (!tagId.IsNullOrWhitespace())
                {
                    
                    events = eventsMan.Provider.GetItemsByTaxon(
                        new Guid(tagId),
                        false,
                        "Tags",
                        typeof(Event),
                        "Status = Master", "",
                        0, 100, ref totalCount).Cast<Event>().AsQueryable();
                    // RadListView1.PageSize * RadListView1.CurrentPageIndex,
                    // RadListView1.PageSize, ref totalCount).Cast<Event>().AsQueryable();
     
                }
                else
                {
     
                    events = eventsMan.GetEvents()
                        .Where(evt => evt.Status == ContentLifecycleStatus.Master)
                        // .Skip(RadListView1.PageSize * RadListView1.CurrentPageIndex)
                        // .Take(RadListView1.PageSize);
                        .Skip(0)
                        .Take(100);
     
     
                }
     
                if (!city.IsNullOrWhitespace())
                    events = events.Where(evt => evt.City == city);
     
                if (RadDatePicker1.SelectedDate != null)
                    events = events.Where(evt => evt.EventStart >= RadDatePicker1.SelectedDate);
     
                if (RadDatePicker2.SelectedDate != null)
                    events = events.Where(evt => evt.EventStart <= RadDatePicker2.SelectedDate);
     
     
                RadListView1.DataSource = events;
                 
                RadListView1.DataBind();
              
     
     
                
                LoadData();
            
     
                foreach (RadListViewDataItem item in RadListView1.Items)
                {
     
                    Label TitleLabel = (Label)item.FindControl("TitleLabel");
                    RadListView lb = (RadListView)item.FindControl("RadListView2");
     
                    string test = TitleLabel.Text;
     
                    IQueryable<Event> Subevents = null;
                    Subevents = eventsMan.GetEvents().Where(evt => (evt.Title == test && evt.Status == ContentLifecycleStatus.Live));
     
                    lb.DataSource = Subevents;
                    lb.DataBind();
     
                    //         }
     
     
                }
     
     
     
            }
     
       
        }
    }
  4. Daniel Plomp
    Daniel Plomp avatar
    952 posts
    Registered:
    18 Feb 2004
    02 Jan 2013 in reply to Rajeev
    Link to this post
    Hi Rajeev,

    Maybe you already tried this, but be sure to turn on the ViewState option inside the page properties where you host your UserControl.
    I think that you need it in order to preserve the viewstate with the values of the selected listitems.

    Regards,
    Daniel
  5. Rajeev
    Rajeev avatar
    3 posts
    Registered:
    30 Nov 2012
    02 Jan 2013 in reply to Daniel Plomp
    Link to this post
    It is still not working
5 posts, 0 answered