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

Forums / Developing with Sitefinity / 7.0 Two dynamic modules, related data, depending dropdowns solution

7.0 Two dynamic modules, related data, depending dropdowns solution

2 posts, 0 answered
  1. Markus
    Markus avatar
    2763 posts
    Registered:
    25 Nov 2005
    26 Jun 2014
    Link to this post

    Hi all
    I want to share something Atanas helped me with achieving. I hope this could help someone someday somewhere :-)

    Here is the video that shows best what I wanted to achieve: www.marktold.com/screencast/sf_related_data_solution.swf

    I wanted two modules

    Module 1 would give categories (hauptkategorie)  and subcategories (unterkateforie)
    Module 2 would use 1:n subcategories

    In my module I wanted 

    Dropdown 1 to display categories (hauptkategorie) and on change 
    Dropdown 2 would display the corresponding subcategories (unterkategorie)

    Dropdown 2 onSelectedIndexChange would pull the corresponding stuff from Module 2.

    Here is what seems to work for me :

    my ascx part:

     

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="panoramas_gallery.ascx.cs" Inherits="SitefinityWebApp.Controls.panoramas_gallery" %>
    <%@ Register Assembly="Telerik.Sitefinity.ContentModules" Namespace="Telerik.Sitefinity.Modules.News.Web.UI" TagPrefix="sf" %>
    <%@ Register TagPrefix="sf" Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.PublicControls" %>
    <%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" TagPrefix="sf" %>
    <%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.RelatedData" TagPrefix="sf" %>
     
     
    <sf:sitefinityupdatepanel id="SUP" runat="server"><ContentTemplate>
        <telerik:RadComboBox ID="RadComboBox1" runat="server" AutoPostBack="True" DataTextField="Hauptkategorie" DataValueField="Hauptkategorie" OnDataBound="RadComboBox1_DataBound" OnSelectedIndexChanged="RadComboBox1_SelectedIndexChanged"
            Skin="MetroTouch" Width="250">
        </telerik:RadComboBox>
        <div>
            <telerik:RadComboBox ID="RadComboBox2" runat="server" AutoPostBack="True" DataTextField="Unterkategorie" DataValueField="ID" OnDataBound="RadComboBox2_DataBound" OnSelectedIndexChanged="RadComboBox2_SelectedIndexChanged"
                Skin="MetroTouch" Width="250px">
            </telerik:RadComboBox>
            <br />
            <br />
        </div>
        <asp:Label ID="Label1" runat="server" Text="Grid is comming" Visible="False"></asp:Label>
        <div class="pano_gallery">
            <asp:Repeater ID="Repeater1" runat="server" Visible="false">
                <ItemTemplate>
                    <div class="sf_2cols_2_50" style="height: 140px;">
                        <div class="pano_title">
                            <h3>
                            <a href="http://www.marktold.ch/panoramas/galerie/html5/output/<;%# Eval("HMTL5") %>" target="_blank">
                                <%# Eval("Title") %>,
                                <%# Eval("Ort") %></h3>
                                </a>
                        </div>
                        <div class="pano_tech">
                                <a href="http://www.marktold.ch/panoramas/galerie/html5/output/<;%# Eval("HMTL5") %>" target="_blank">
                              Panorama laden</a>
                        </div>
                       
                    </div>
                    <div class="sf_2cols_1_50" style="height: 140px;">
                        <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Container.DataItem.GetRelatedItems("PanoramaThumb") %>'>
                            <ItemTemplate>
                                  
                                <img height="125" src="<%# Eval("ThumbnailUrl")%>" alt="<%# Eval("AlternativeText")%>" id="<%# Eval("Id") %>" title="<%# Eval("Title") %>">
                                
                            </ItemTemplate>
                        </asp:Repeater>
                    </div>
                </ItemTemplate>
                
            </asp:Repeater>
     
          
            
        </div>
        </ContentTemplate>
    </sf:sitefinityupdatepanel>

    And the codebehind (sorry -> not cleaned up yet)

     

    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.Model;
    using Telerik.Sitefinity.DynamicModules;
    using Telerik.Sitefinity.Data.Linq.Dynamic;
    using Telerik.Sitefinity.DynamicModules.Model;
    using Telerik.Sitefinity.GenericContent.Model;
    using Telerik.Sitefinity.Modules.Libraries;
    using Telerik.Sitefinity.Utilities.TypeConverters;
    using Telerik.Sitefinity.Security;
    using Telerik.Sitefinity.Lifecycle;
    using System.Globalization;
    using System.Threading;
    using Telerik.Web.UI;
    using Telerik.OpenAccess;
    using Telerik.Sitefinity.RelatedData;
    using System.Collections;
    using Telerik.Sitefinity.Model.ContentLinks;
    using Telerik.Sitefinity.DynamicTypes;
    using Telerik.Sitefinity.RecurrentRules;
    using Telerik.Sitefinity.Libraries.Model;
    using Telerik.Sitefinity.Utilities.TypeConverters;
    using Telerik.Sitefinity.RelatedData;
    using Telerik.Sitefinity.Pages.Model;
    using Telerik.Sitefinity.Web.UI.ControlDesign;
     
    namespace SitefinityWebApp.Controls
    {
        public partial class panoramas_gallery : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    RadComboBox2.Visible = false;
                    RadComboBox1.DataSource = RetrieveCollectionOfHauptkategories();
                    RadComboBox1.DataBind();
                }
     
                   
            
       
     
     
            public IQueryable<DynamicContent> RetrieveCollectionOfHauptkategories()
            {
                // Set the provider name for the DynamicModuleManager here. All available providers are listed in
                // Administration -> Settings -> Advanced -> DynamicModules -> Providers
                var providerName = String.Empty;
                DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
                Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
               
                // This is how we get the collection of Hauptkategorie items
                var myCollection = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(item => item.Status == ContentLifecycleStatus.Live).OrderBy(i => i.FieldValue<string>("Hauptkategorie"));
                // At this point myCollection contains the items from type hauptkategorieType
                return myCollection;
            }
     
            public List<DynamicContent> RetrieveCollectionOfUnterkategories()
            {
                var hauptkat = RadComboBox1.SelectedValue;
                // Set the provider name for the DynamicModuleManager here. All available providers are listed in
                // Administration -> Settings -> Advanced -> DynamicModules -> Providers
                var providerName = String.Empty;
                DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
                Type unterkategoireType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Unterkategoire");
                Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
                var parentitem = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(item => item.Status == ContentLifecycleStatus.Live && item.UrlName == hauptkat).FirstOrDefault();
                // This is how we get the collection of Unterkategorie items
     
                var myCollection = dynamicModuleManager.GetChildItemsHierarchy(parentitem).OrderBy(i => i.FieldValue<string>("Unterkategorie")).ToList();
                //var myCollection = dynamicModuleManager.GetDataItems(unterkategoireType).Where(item => item.Status == ContentLifecycleStatus.Live && item.SystemParentItem);
                // At this point myCollection contains the items from type unterkategoireType
                
                return myCollection;
                 
            }
     
            protected void RadComboBox1_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
            {
                RadComboBox2.Visible = true;
               RadComboBox2.DataSource = RetrieveCollectionOfUnterkategories();
                RadComboBox2.DataBind();
                Repeater1.Visible = false;
            }
     
            protected void RadComboBox2_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
            {
                var hauptkat = RadComboBox1.SelectedValue;
                hauptkat = hauptkat.Replace(" ", "-");
     
                var unterkat = RadComboBox2.SelectedValue;
                unterkat = unterkat.Replace(" ", "-");
     
                var providerName = String.Empty;
                Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
                Type unterkategoireType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Unterkategoire");
                Type panorama = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Panoramabilder.Panorama");
     
                DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
     
              var myCollection = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(i => i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master && i.UrlName == hauptkat).FirstOrDefault();
                           
                            
                DynamicContent item = dynamicModuleManager.GetDataItems(unterkategoireType).Where(i => i.Status == ContentLifecycleStatus.Live && i.Id.ToString()  == unterkat && i.SystemParentId == myCollection.Id).FirstOrDefault();
                var relatedParents = RelatedDataExtensions.GetRelatedParentItems(item, "Telerik.Sitefinity.DynamicTypes.Model.Panoramabilder.Panorama").ToList();
                Repeater1.Visible = true;
                Repeater1.DataSource = relatedParents;
                Repeater1.DataBind();
            }
          
     
            protected void RadComboBox1_DataBound(object sender, EventArgs e)
            {
                RadComboBox1.Items.Insert(0, new RadComboBoxItem("Wählen Sie ein Thema", string.Empty));
            }
     
            protected void RadComboBox2_DataBound(object sender, EventArgs e)
            {
                RadComboBox2.Items.Insert(0, new RadComboBoxItem("Wählen Sie ein Unterthema", string.Empty));
            }
     
     
          
            protected string GetFlashUrl(object item)
            {
                var FlashURL = string.Empty;
     
                var FlashFile = item.GetRelatedItems<MediaContent>("Flash").FirstOrDefault();
                if (FlashFile != null)
                {
                    FlashURL = FlashFile.Url.ToString();
                 
                }
          
                return FlashURL;
            }
     
            protected string GetQtUrl(object item)
            {
                var QtURL = string.Empty;
     
                var QtFile = item.GetRelatedItems<MediaContent>("QuicktimeFile").FirstOrDefault();
                if (QtFile != null)
                {
                    QtURL = QtFile.AutoGenerateUniqueUrl.ToString();
     
                }
     
                           
                return QtURL;
            }
     
            protected string GetJPGUrl(object item)
            {
                var JpgURL = string.Empty;
     
                var JpgFile = item.GetRelatedItems<MediaContent>("JPG").FirstOrDefault();
                if (JpgFile != null)
                {
                    JpgURL =JpgFile.ItemDefaultUrl.ToString();
     
                }
     
                           
                return JpgURL;
            }
        }
    }

    Markus

  2. Pavel Benov
    Pavel Benov avatar
    341 posts
    Registered:
    14 Mar 2016
    27 Jun 2014
    Link to this post
    Hello Markus,

    Thank you for sharing the solution with the community. As a token of appreciation I have increased your Telerik points accordingly.

    Regards,
    Pavel Benov
    Telerik
     
    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 Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items
     
2 posts, 0 answered