2012-05-09 4 views
1

Я создал специальный документ события, который расширяет поля обычного документа события. Я добавил поле, которое может содержать 0 для многих идентификаторов категорий в списке с разделителями каналов. Категории хранятся в пользовательской таблице.Как я могу получить фильтр для работы с веб-страницей календаря событий?

Вот мой код фильтра:

public partial class CMSGlobalFiles_EventCategoryFilter : CMSAbstractDataFilterControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected override void OnInit(EventArgs e) 
    { 
     SetupControl(); 

     base.OnInit(e); 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
     if (RequestHelper.IsPostBack()) 
     { 
      setFilter(); 
     } 

     base.OnPreRender(e); 
    } 

    private void SetupControl() 
    { 
     if (this.StopProcessing) 
     { 
      this.Visible = false; 
     } 

     else if (!RequestHelper.IsPostBack()) 
     { 
      InitializeCategory(); 
     } 

    } 

    private void InitializeCategory() 
    { 
     CustomTableItemProvider customTableProvider = ne CustomTableItemProvider(CMSContext.CurrentUser); 

     string where = ""; 

     string tableName = "customtable.EventCategory"; 

     DataClassInfo customTable = DataClassInfoProvider.GetDataClass(tableName); 

     if (customTable != null) 
     { 

      DataSet dataSet = customTableProvider.GetItems(tableName, where, null); 

      if (!DataHelper.DataSourceIsEmpty(dataSet)) 
      { 
       this.drpCategory.DataSource = dataSet; 
       this.drpCategory.DataTextField = "CategoryName"; 
       this.drpCategory.DataValueField = "ItemGUID"; 

       this.drpCategory.DataBind(); 

       this.drpCategory.Items.Insert(0, new ListItem("(all)", "##ALL##")); 
      } 
     } 

    } 

    private void setFilter() 
    { 
     string where = null; 

     if (this.drpCategory.SelectedValue != null) 
     { 
      Guid itemGUID = ValidationHelper.GetGuid(this.drpCategory.SelectedValue, Guid.Empty); 

      if (itemGUID != Guid.Empty) 
      { 
       where = "EventCategory LIKE \'%" + itemGUID.ToString() + "%\'"; 
      } 

     } 

     if (where != null) 
     { 
      this.WhereCondition = where; 
     } 

     this.RaiseOnFilterChanged(); 
    } 

} 

Этот фильтр отлично работает с использованием основного ретранслятора и источника данных документа. Когда я использую календарь событий, это не так. Я использую версию Kentico 6.0.30

ответ

1

Проблема заключается в другом жизненном цикле EventCalendar на основе элемента управления CMSCalendar, который основан на стандартном .Net-календаре.

Прежде всего, наши разработчики обнаружили способ исправить это и разрешить запуск сценария по умолчанию. Это исправление будет включено в исправление 6.0.33 (планируется выпустить в пятницу 25-го). Прошу прощения за это неудобство.

Помимо этого исправления, вы также можете сделать EventCalendar для фильтрации своих результатов путем изменения (клонирования) веб-части, интеграции элементов управления фильтрами непосредственно в эту веб-часть и установки условия календаря Where в OnPreRender до DataBind as

protected override void OnPreRender(EventArgs e) 
{ 
    calItems.WhereCondition = "some filtering condition"; 
    ... 

Если вы можете исправить ваш экземпляр CMS, это, безусловно, будет меньше усилий.

С уважением, поддержка

Зденек/Кентико