using System; using System.ComponentModel; using System.Data; using System.Web; using System.Web.Script.Serialization; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.Controls; using CMS.ExtendedControls; using CMS.GlobalHelper; using CMS.ISearchEngine; using CMS.PortalEngine; using CMS.SiteProvider; using CMS.UIControls; using CMS.WebAnalytics; using SearchHelper = CMS.SiteProvider.SearchHelper; public partial class CMSModules_SmartSearch_Controls_SearchResults : CMSUserControl, ISearchFilterable, IUniPageable { #region "Variables" // Filter support private string mFilterSearchCondition = null; private string mFilterSearchSort = null; private string mFilterID = null; // Search private string mSearchSort = null; private string mSearchCondition = null; private string mIndexes = null; private string mPath = null; private bool mCheckPermissions = false; private SearchOptionsEnum mSearchOptions = SearchOptionsEnum.BasicSearch; private string mTransformationName = "CMS.Root.SmartSearchResults"; private string mDocumentTypes = null; private bool? mCombineWithDefaultCulture = null; private string mCultureCode = CMSContext.PreferredCultureCode; private bool mSearchInAttachments = false; private string mAttachmentsWhere = ""; private string mAttachmentsOrderBy = ""; private string mNoResultsText = ResHelper.GetString("srch.results.noresults"); private bool mIgnoreTransformations = false; private bool mBlockFieldOnlySearch = true; private bool mSearchTextRequired = true; // Pager template private string mPagesTemplateName = null; private string mCurrentPageTemplateName = null; private string mSeparatorTemplateName = null; private string mFirstPageTemplateName = null; private string mLastPageTemplateName = null; private string mPreviousPageTemplateName = null; private string mNextPageTemplateName = null; private string mPreviousGroupTemplateName = null; private string mNextGroupTemplateName = null; private string mLayoutTemplateName = null; // Direct access templates private ITemplate mPagesTemplate = null; private ITemplate mCurrentPageTemplate = null; private ITemplate mFirstPageTemplate = null; private ITemplate mLastPageTemplate = null; private ITemplate mPreviousPageTemplate = null; private ITemplate mNextPageTemplate = null; private ITemplate mPreviousGroupTemplate = null; private ITemplate mNextGroupTemplate = null; private ITemplate mLayoutTemplate = null; private ITemplate mPageNumbersSeparatorTemplate = null; // Template private ITemplate mItemTemplate = null; private ITemplate mAlternatingItemTemplate = null; private ITemplate mFooterTemplate = null; private ITemplate mHeaderTemplate = null; private ITemplate mSeparatorTemplate = null; // Basic repeater instance private BasicRepeater repSearchResults = new BasicRepeater(); private int mMaxResults = 0; // Pager instance private UniPager pgr = null; #endregion #region "Delegates & events" /// /// Search completed deleagate. /// /// Determines whether this control is visible public delegate void SearchCompletedHandler(bool visible); /// /// Raises when search is completed. /// public event SearchCompletedHandler OnSearchCompleted; #endregion #region "Properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { if (IsLiveSite) { return plcMess; } else { return base.MessagesPlaceHolder; } } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { plcMess.IsLiveSite = value; base.IsLiveSite = value; } } /// /// Control CSS class /// public string CssClass { get; set; } #endregion #region "Search properties" /// /// Gets or sets filter search condition. /// public string FilterSearchCondition { get { return mFilterSearchCondition; } set { mFilterSearchCondition = value; } } /// /// Gets or sets filter sorting of search. /// public string FilterSearchSort { get { return mFilterSearchSort; } set { mFilterSearchSort = value; } } /// /// Gets or sets sorting of search. /// public string SearchSort { get { return mSearchSort; } set { mSearchSort = value; } } /// /// Gets or sets search condition. /// public string SearchCondition { get { return mSearchCondition; } set { mSearchCondition = value; } } /// /// Gets or sets indexes. /// public string Indexes { get { return mIndexes; } set { mIndexes = value; } } /// /// Gets or sets path. /// public string Path { get { return mPath; } set { mPath = value; } } /// /// Gets or sets document types. /// public string DocumentTypes { get { return mDocumentTypes; } set { mDocumentTypes = value; } } /// /// Gets or sets check permissions. /// public bool CheckPermissions { get { return mCheckPermissions; } set { mCheckPermissions = value; } } /// /// Gets or sets search option. /// public SearchOptionsEnum SearchOptions { get { return mSearchOptions; } set { mSearchOptions = value; } } /// /// Gets or sets transformation name. /// public string TransformationName { get { return mTransformationName; } set { mTransformationName = value; } } /// /// Gets or sets culture code. /// public string CultureCode { get { return mCultureCode; } set { mCultureCode = value; } } /// /// Gets or sets combine with default culture. /// public bool CombineWithDefaultCulture { get { // Get from setting if not set if (!mCombineWithDefaultCulture.HasValue) { return SiteInfoProvider.CombineWithDefaultCulture(CMSContext.CurrentSiteName); } else { return mCombineWithDefaultCulture.Value; } } set { mCombineWithDefaultCulture = value; } } /// /// Gets or sets search int attachments. /// public bool SearchInAttachments { get { return mSearchInAttachments; } set { mSearchInAttachments = value; } } /// /// Gets or sets culture code. /// public string AttachmentsWhere { get { return mAttachmentsWhere; } set { mAttachmentsWhere = value; } } /// /// Gets or sets culture code. /// public string AttachmentsOrderBy { get { return mAttachmentsOrderBy; } set { mAttachmentsOrderBy = value; } } /// /// Gets or sets culture code. /// public string NoResultsText { get { return mNoResultsText; } set { mNoResultsText = value; } } /// /// Gets or sets the search mode label text. /// public string FilterID { get { return mFilterID; } set { mFilterID = value; } } /// /// Indicates if transformations should be ignored and templates for direct access should be used. /// public bool IgnoreTransformations { get { return mIgnoreTransformations; } set { mIgnoreTransformations = value; } } /// /// Indicates if parsing errors should be showed if occurs. /// public bool ShowParsingErrors { get; set; } /// /// Indicates if search text is required. /// public bool SearchTextRequired { get { return mSearchTextRequired; } set { mSearchTextRequired = value; } } /// /// Indicates if search should be work without search text. /// public bool BlockFieldOnlySearch { get { return mBlockFieldOnlySearch; } set { mBlockFieldOnlySearch = value; } } /// /// Gets or sets if filter is applied immediately. /// public bool SearchOnEachPageLoad { get { return ValidationHelper.GetBoolean(GetValue("SearchOnEachPageLoad"), false); } set { SetValue("SearchOnEachPageLoad", value); } } #endregion #region "Pager properties" /// /// Gets or sets the value that indicates whether scroll position should be cleared after post back paging /// public bool ResetScrollPositionOnPostBack { get { return pgrSearch.ResetScrollPositionOnPostBack; } set { pgrSearch.ResetScrollPositionOnPostBack = value; } } /// /// Gets or sets page size. /// public int PageSize { get { return pgrSearch.PageSize; } set { pgrSearch.PageSize = value; } } /// /// Gets or sets search option. /// public UniPagerMode PagingMode { get { return pgrSearch.PagerMode; } set { pgrSearch.PagerMode = value; } } /// /// Gets or sets query string key. /// public string QueryStringKey { get { return pgrSearch.QueryStringKey; } set { pgrSearch.QueryStringKey = value; } } /// /// Gets or sets group size. /// public int GroupSize { get { return pgrSearch.GroupSize; } set { pgrSearch.GroupSize = value; } } /// /// Gets or sets the value that indicates whether first and last item template are displayed dynamically based on current view. /// public bool DisplayFirstLastAutomatically { get { return pgrSearch.DisplayFirstLastAutomatically; } set { pgrSearch.DisplayFirstLastAutomatically = value; } } /// /// Gets or sets the value that indicates whether first and last item template are displayed dynamically based on current view. /// public bool DisplayPreviousNextAutomatically { get { return pgrSearch.DisplayPreviousNextAutomatically; } set { pgrSearch.DisplayPreviousNextAutomatically = value; } } /// /// Gets or sets the value that indicates whether pager should be hidden for single page. /// public bool HidePagerForSinglePage { get { return pgrSearch.HidePagerForSinglePage; } set { pgrSearch.HidePagerForSinglePage = value; } } /// /// Gets or sets the pager max pages. /// public int MaxPages { get { return pgrSearch.MaxPages; } set { pgrSearch.MaxPages = value; } } /// /// Gets or sets the max. displayed results. /// public int MaxResults { get { return mMaxResults; } set { mMaxResults = value; } } #endregion #region "UniPager Template properties" /// /// Gets or sets the pages template name. /// public string PagesTemplateName { get { return mPagesTemplateName; } set { mPagesTemplateName = value; } } /// /// Gets or sets the current page template name. /// public string CurrentPageTemplateName { get { return mCurrentPageTemplateName; } set { mCurrentPageTemplateName = value; } } /// /// Gets or sets the separator template name. /// public string SeparatorTemplateName { get { return mSeparatorTemplateName; } set { mSeparatorTemplateName = value; } } /// /// Gets or sets the first page template name. /// public string FirstPageTemplateName { get { return mFirstPageTemplateName; } set { mFirstPageTemplateName = value; } } /// /// Gets or sets the last page template name. /// public string LastPageTemplateName { get { return mLastPageTemplateName; } set { mLastPageTemplateName = value; } } /// /// Gets or sets the previous page template name. /// public string PreviousPageTemplateName { get { return mPreviousPageTemplateName; } set { mPreviousPageTemplateName = value; } } /// /// Gets or sets the next page template name. /// public string NextPageTemplateName { get { return mNextPageTemplateName; } set { mNextPageTemplateName = value; } } /// /// Gets or sets the previous group template name. /// public string PreviousGroupTemplateName { get { return mPreviousGroupTemplateName; } set { mPreviousGroupTemplateName = value; } } /// /// Gets or sets the next group template name. /// public string NextGroupTemplateName { get { return mNextGroupTemplateName; } set { mNextGroupTemplateName = value; } } /// /// Gets or sets the layout template name. /// public string LayoutTemplateName { get { return mLayoutTemplateName; } set { mLayoutTemplateName = value; } } /// /// Gets or sets the pages template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate PageNumbersTemplate { get { return mPagesTemplate; } set { mPagesTemplate = value; } } /// /// Gets or sets the current page template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate CurrentPageTemplate { get { return mCurrentPageTemplate; } set { mCurrentPageTemplate = value; } } /// /// Gets or sets the first page template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate FirstPageTemplate { get { return mFirstPageTemplate; } set { mFirstPageTemplate = value; } } /// /// Gets or sets the last page template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate LastPageTemplate { get { return mLastPageTemplate; } set { mLastPageTemplate = value; } } /// /// Gets or sets the previous page template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate PreviousPageTemplate { get { return mPreviousPageTemplate; } set { mPreviousPageTemplate = value; } } /// /// Gets or sets the next page template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate NextPageTemplate { get { return mNextPageTemplate; } set { mNextPageTemplate = value; } } /// /// Gets or sets the previous group template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate PreviousGroupTemplate { get { return mPreviousGroupTemplate; } set { mPreviousGroupTemplate = value; } } /// /// Gets or sets the next group template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate NextGroupTemplate { get { return mNextGroupTemplate; } set { mNextGroupTemplate = value; } } /// /// Gets or sets the next group template for direct access. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate PageNumbersSeparatorTemplate { get { return mPageNumbersSeparatorTemplate; } set { mPageNumbersSeparatorTemplate = value; } } /// /// Gets or sets the layout template name. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public ITemplate LayoutTemplate { get { return mLayoutTemplate; } set { mLayoutTemplate = value; } } /// /// Sets or gets item template. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public virtual ITemplate ItemTemplate { get { return mItemTemplate; } set { mItemTemplate = value; } } /// /// Sets or gets alternating item template. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public virtual ITemplate AlternatingItemTemplate { get { return mAlternatingItemTemplate; } set { mAlternatingItemTemplate = value; } } /// /// Sets or gets header template. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public virtual ITemplate HeaderTemplate { get { return mHeaderTemplate; } set { mHeaderTemplate = value; } } /// /// Sets or gets footer template. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public virtual ITemplate FooterTemplate { get { return mFooterTemplate; } set { mFooterTemplate = value; } } /// /// Sets or gets separator template. /// [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue((string)null), Browsable(false)] public virtual ITemplate SeparatorTemplate { get { return mSeparatorTemplate; } set { mSeparatorTemplate = value; } } #endregion #region "Advanced methods" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { // Do nothing } else { // Try get external pager pgr = UniPagerControl; bool isExternal = true; // Check whether external pager is set if (pgr == null) { isExternal = false; pgr = pgrSearch; // UniPager properties pgrSearch.PageSize = PageSize; pgrSearch.GroupSize = GroupSize; pgrSearch.QueryStringKey = QueryStringKey; pgrSearch.DisplayFirstLastAutomatically = DisplayFirstLastAutomatically; pgrSearch.DisplayPreviousNextAutomatically = DisplayPreviousNextAutomatically; pgrSearch.HidePagerForSinglePage = HidePagerForSinglePage; pgrSearch.PagerMode = PagingMode; pgrSearch.MaxPages = MaxPages; } if (!isExternal) { #region "UniPager template properties" // UniPager direct templates if (PageNumbersTemplate != null) { pgrSearch.PageNumbersTemplate = PageNumbersTemplate; } if (CurrentPageTemplate != null) { pgrSearch.CurrentPageTemplate = CurrentPageTemplate; } if (PageNumbersSeparatorTemplate != null) { pgrSearch.PageNumbersSeparatorTemplate = PageNumbersSeparatorTemplate; } if (FirstPageTemplate != null) { pgrSearch.FirstPageTemplate = FirstPageTemplate; } if (LastPageTemplate != null) { pgrSearch.LastPageTemplate = LastPageTemplate; } if (PreviousPageTemplate != null) { pgrSearch.PreviousPageTemplate = PreviousPageTemplate; } if (NextPageTemplate != null) { pgrSearch.NextPageTemplate = NextPageTemplate; } if (PreviousGroupTemplate != null) { pgrSearch.PreviousGroupTemplate = PreviousGroupTemplate; } if (NextGroupTemplate != null) { pgrSearch.NextGroupTemplate = NextGroupTemplate; } if (LayoutTemplate != null) { pgrSearch.LayoutTemplate = LayoutTemplate; } // UniPager template properties if (!String.IsNullOrEmpty(PagesTemplateName)) { pgrSearch.PageNumbersTemplate = CMSDataProperties.LoadTransformation(pgrSearch, PagesTemplateName, false); } if (!String.IsNullOrEmpty(CurrentPageTemplateName)) { pgrSearch.CurrentPageTemplate = CMSDataProperties.LoadTransformation(pgrSearch, CurrentPageTemplateName, false); } if (!String.IsNullOrEmpty(SeparatorTemplateName)) { pgrSearch.PageNumbersSeparatorTemplate = CMSDataProperties.LoadTransformation(pgrSearch, SeparatorTemplateName, false); } if (!String.IsNullOrEmpty(FirstPageTemplateName)) { pgrSearch.FirstPageTemplate = CMSDataProperties.LoadTransformation(pgrSearch, FirstPageTemplateName, false); } if (!String.IsNullOrEmpty(LastPageTemplateName)) { pgrSearch.LastPageTemplate = CMSDataProperties.LoadTransformation(pgrSearch, LastPageTemplateName, false); } if (!String.IsNullOrEmpty(PreviousPageTemplateName)) { pgrSearch.PreviousPageTemplate = CMSDataProperties.LoadTransformation(pgrSearch, PreviousPageTemplateName, false); } if (!String.IsNullOrEmpty(NextPageTemplateName)) { pgrSearch.NextPageTemplate = CMSDataProperties.LoadTransformation(pgrSearch, NextPageTemplateName, false); } if (!String.IsNullOrEmpty(PreviousGroupTemplateName)) { pgrSearch.PreviousGroupTemplate = CMSDataProperties.LoadTransformation(pgrSearch, PreviousGroupTemplateName, false); } if (!String.IsNullOrEmpty(NextGroupTemplateName)) { pgrSearch.NextGroupTemplate = CMSDataProperties.LoadTransformation(pgrSearch, NextGroupTemplateName, false); } if (!String.IsNullOrEmpty(LayoutTemplateName)) { pgrSearch.LayoutTemplate = CMSDataProperties.LoadTransformation(pgrSearch, LayoutTemplateName, false); } #endregion } // Load transformation if (!string.IsNullOrEmpty(TransformationName) && !IgnoreTransformations) { repSearchResults.ItemTemplate = CMSDataProperties.LoadTransformation(this, TransformationName, false); } // Set transformation directly else { repSearchResults.ItemTemplate = ItemTemplate; repSearchResults.HeaderTemplate = HeaderTemplate; repSearchResults.FooterTemplate = FooterTemplate; repSearchResults.AlternatingItemTemplate = AlternatingItemTemplate; repSearchResults.SeparatorTemplate = SeparatorTemplate; } plcBasicRepeater.Controls.Clear(); repSearchResults.ID = "repSearchResults"; plcBasicRepeater.Controls.Add(repSearchResults); Visible = true; } } /// /// On page prerender. /// /// Event argument protected override void OnPreRender(EventArgs e) { Search(); base.OnPreRender(e); } /// /// Renders control /// /// HTML writer protected override void Render(HtmlTextWriter writer) { // Hide messages placeholder when no messages are being displayed plcMess.Visible = ShowParsingErrors || plcMess.HasText; if (!string.IsNullOrEmpty(CssClass)) { writer.Write("
", CssClass); } base.Render(writer); if (!string.IsNullOrEmpty(CssClass)) { writer.Write("
"); } } /// /// Perform search. /// protected void Search() { if (StopProcessing) { // Do nothing } else { // Get query strings string searchText = QueryHelper.GetString("searchtext", ""); bool searchTextIsNotEmptyOrRequired = (!SearchTextRequired || !String.IsNullOrEmpty(searchText)); bool searchAllowed = SearchOnEachPageLoad || QueryHelper.Contains("searchtext"); if ((searchTextIsNotEmptyOrRequired || !SearchHelper.SearchOnlyWhenContentPresent) && searchAllowed) { string searchMode = QueryHelper.GetString("searchMode", ""); SearchModeEnum searchModeEnum = CMS.ISearchEngine.SearchHelper.GetSearchModeEnum(searchMode); // Get current culture string culture = CultureCode; if (string.IsNullOrEmpty(culture)) { culture = ValidationHelper.GetString(ViewState["CultureCode"], CMSContext.PreferredCultureCode); } // Get default culture string defaultCulture = CultureHelper.GetDefaultCulture(CMSContext.CurrentSiteName); // Resolve path string path = Path; if (!string.IsNullOrEmpty(path)) { path = CMSContext.ResolveCurrentPath(Path); } if (CMSContext.ViewMode == ViewModeEnum.LiveSite) { // Log on site keywords if (AnalyticsHelper.JavascriptLoggingEnabled(CMSContext.CurrentSiteName)) { ScriptHelper.RegisterWebServiceCallFunction(Page); string script = "WebServiceCall('" + URLHelper.GetAbsoluteUrl("~/CMSPages/WebAnalyticsService.asmx") + "','LogSearch', '{\"keyword\":" + // Serialize raw search text to escape '<' and similar characters, then escape '\' new JavaScriptSerializer().Serialize(searchText).Replace(@"\", @"\\") + ", \"pageGUID\":\"" + CMSContext.CurrentPageInfo.DocumentGUID + "\"}')"; ScriptHelper.RegisterStartupScript(Page, typeof(string), "logSearch", script, true); } else { AnalyticsHelper.LogOnSiteSearchKeywords(CMSContext.CurrentSiteName, CMSContext.CurrentAliasPath, culture, searchText, 0, 1); } } // Prepare search text searchText = SearchHelper.CombineSearchCondition(searchText, SearchCondition + FilterSearchCondition, searchModeEnum, SearchOptions, DocumentTypes, culture, defaultCulture, CombineWithDefaultCulture); // Get positions and ranges for search method int startPosition = 0; int numberOfProceeded = 100; int displayResults = 100; if (pgr.PageSize != 0 && pgr.GroupSize != 0) { startPosition = (pgr.CurrentPage - 1) * pgr.PageSize; numberOfProceeded = (((pgr.CurrentPage / pgr.GroupSize) + 1) * pgr.PageSize * pgr.GroupSize) + pgr.PageSize; displayResults = pgr.PageSize; } if ((MaxResults > 0) && (numberOfProceeded > MaxResults)) { numberOfProceeded = MaxResults; } // Combine regular search sort with filter sort string srt = ValidationHelper.GetString(SearchSort, String.Empty).Trim(); string filterSrt = ValidationHelper.GetString(FilterSearchSort, String.Empty).Trim(); if (!String.IsNullOrEmpty(filterSrt)) { if (!String.IsNullOrEmpty(srt)) { srt += ", "; } srt += filterSrt; } // Prepare parameters SearchParameters parameters = new SearchParameters() { SearchFor = searchText, SearchSort = SearchHelper.GetSort(srt), Path = path, ClassNames = DocumentTypes, CurrentCulture = culture, DefaultCulture = defaultCulture, CombineWithDefaultCulture = CombineWithDefaultCulture, CheckPermissions = CheckPermissions, SearchInAttachments = SearchInAttachments, User = (UserInfo)CMSContext.CurrentUser, SearchIndexes = Indexes, StartingPosition = startPosition, DisplayResults = displayResults, NumberOfProcessedResults = numberOfProceeded, NumberOfResults = 0, AttachmentWhere = AttachmentsWhere, AttachmentOrderBy = AttachmentsOrderBy, BlockFieldOnlySearch = BlockFieldOnlySearch, }; // Search DataSet results = SearchHelper.Search(parameters); int numberOfResults = parameters.NumberOfResults; if ((MaxResults > 0) && (numberOfResults > MaxResults)) { numberOfResults = MaxResults; } // Compute page number when necessary (filter changed the number of found result) if ((pgr.PageSize != 0) && (pgr.GroupSize != 0) && (pgr.CurrentPage > ((numberOfResults - 1) / pgr.PageSize) + 1)) { pgr.CurrentPage = numberOfResults == 0 ? 1 : ((numberOfResults - 1) / pgr.PageSize) + 1; } // Fill repeater with results repSearchResults.DataSource = results; repSearchResults.PagerForceNumberOfResults = numberOfResults; this.PagerForceNumberOfResults = numberOfResults; repSearchResults.DataBind(); // Call page binding event if (OnPageBinding != null) { OnPageBinding(this, null); } // Show now results found ? if (numberOfResults == 0) { if (ShowParsingErrors) { Exception searchError = SearchHelper.LastSmartSearchError; if (searchError != null) { ShowError(GetString("smartsearch.searcherror") + " " + searchError.Message); } } lblNoResults.Text = NoResultsText; lblNoResults.Visible = true; } } else { Visible = false; } // Invoke search completed event if (OnSearchCompleted != null) { OnSearchCompleted(Visible); } } } /// /// Applies search filter. /// /// Search condition /// Search sort public void ApplyFilter(string searchCondition, string searchSort) { FilterSearchCondition += " " + searchCondition; FilterSearchSort += " " + searchSort; } /// /// Adds filter option to url. /// /// Webpart id /// Options public void AddFilterOptionsToUrl(string searchWebpartID, string options) { // Do nothing } /// /// Loads data. /// public void LoadData() { // Register control for filter CMSControlsHelper.SetFilter(FilterID, this); } #endregion #region "IUniPageable Members" /// /// Pager data item object. /// public object PagerDataItem { get; set; } /// /// Pager control. /// public UniPager UniPagerControl { get; set; } /// /// Gets or sets the number of result. Enables proceed "fake" datasets, where number /// of results in the dataset is not correspondent to the real number of results /// This property must be equal -1 if should be disabled /// public int PagerForceNumberOfResults { get; set; } /// /// Occurs when the control bind data. /// public event EventHandler OnPageBinding; // Do not display warning for not-used event handler required by interface #pragma warning disable 67 /// /// Occurs when the pager change the page and current mode is postback => reload data /// public event EventHandler OnPageChanged; #pragma warning restore 67 /// /// Evokes control databind. /// public void ReBind() { // Do nothing } #endregion }