среда, 24 апреля 2013 г.

Модификация Picker контрола для отображения любого количества записей в методе Resolve

Компонент Picker, входящий в состав K2 smartforms - довольно мощный и удобный компонент, позволяющий осуществлять поиск и выбор (включая множественный) значений из любого источника данных, через технологию K2 SmartObjects.

Вместе с тем, была подмечена одна маленькая особенность - в режиме Resolve, данный компонент возвращает максимум 10 значений, не позволяя увеличить это значение настройками параметров. Например, при поиске фамилий в большой организации может возникнуть ситуация, когда Ивановых, Петровых или Сидоровых, больше 10 человек. И выбор не попавшего в Top10 человека станет проблематичным.



Да, во втором своем режиме (Search) этой проблемы нет, так как результаты в нем выводятся в режиме таблицы со страницами и есть специальный параметр этого контрола - PageSize, который определяет количество записей на страницу. Но, раз мы даем пользователям разные возможности по поиску данных, то и хорошо бы, чтобы и параметры обоих методов могли быть сконфигурированы. Итак, как изменить поведение метода Resolve для отображения большего количества записей...



Для этого нам понадобиться сделать следующее:

  1. Загрузить с K2 Underground контрол HTML Literal и установить его (инструкция по установке доступна в скачиваемом архиве и занимает секунд 20): http://www.k2underground.com/groups/html_literal_control/default.aspx
  2. Поместить этот контрол на представление, где установлен Picker и задать его свойство HTML следующим образом:
    <script type="text/javascript">
    function adjustPickerLimit()
    {
                    if (!checkExists(SourceCode) || !checkExists(SourceCode.Forms) || !checkExists(SourceCode.Forms.Controls) || !checkExists(SourceCode.Forms.Controls.Web) || !checkExists(SourceCode.Forms.Controls.Web.PickerBehavior))
                    {
                                    setTimeout(adjustPickerLimit,500);
                                    return;
                    }
                    SourceCode.Forms.Controls.Web.PickerBehavior.prototype.oldinit = SourceCode.Forms.Controls.Web.PickerBehavior.prototype.initialize
                    SourceCode.Forms.Controls.Web.PickerBehavior.prototype.initialize=function()
                    {
                                    this._resolveSearchLimit = 20;
                                    SourceCode.Forms.Controls.Web.PickerBehavior.prototype.oldinit.apply(this);
                    }
    }
    adjustPickerLimit();
    </script>
  3. Можно изменить значение resolveSearchLimit на то, которое требуется (в примере стоит 20)
После этого Picker будет отображать количество элементов с новым максимумом.



Комментариев нет:

Отправить комментарий