Особенности обработки событий, события загрузки и состояния списка, свойства, методы

ObjectListView не содержит никакой функциональности по действиям (создание, сохранение и т.д.) с объектами данных, отображаемыми в списке. Программист должен написать код, «ловящий» события, происходящие в ObjectListView, и отрабатывающий соответствующую реакцию. Наоборот, если в программе произошло некоторое действие, необходимо сообщить о нём ObjectListView для адекватного отображения объектов.

Для перехвата событий, необходимо:

  • Повесить обработчик на событие CreateObject при реализации действий по созданию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку создания объекта;
  • Повесить обработчик на событие EditObject при реализации действий по редактированию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку редактирования объекта;
  • Повесить обработчик на событие DeleteObject при реализации действий по созданию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку удаления объекта;

Для информирования ObjectListView о произошедших действиях, необходимо:

  • Вызвать метод AddObject, если объект данных был добавлен, он отобразится в ObjectListView (Важно! Вызов до обработки объекта данных сервисом данных приведет к ошибке, т.к. ObjectListView попытается прочитать объект данных из хранилища, где его ещё нет);
  • Вызвать метод UpdateObject, если объект данных был изменён, тогда поля в ObjectListView поменяют значения на соответствующие в объекте данных;
  • Вызвать метод DeleteObject, если объект данных был удалён, тогда он исчезнет из ObjectListView.

События загрузки списка

Информация о загрузке списка

В обработчике события ОbjectListView.AfterFillData существует возможность получить информацию об успешности загрузки. В качестве параметра события вместо типа EventArgs передается его наследник AfterFillDataEventArgs. Тип AfterFillDataEventArgs имеет три свойства:

        /// <summary>
        /// Исключение, произошедшее во время загрузки
        /// </summary>
        public Exception Exception { get; private set;}
        /// <summary>
        /// Загрузка отменена пользователем
        /// </summary>
        public bool CanceledByUser { get; private set; }
        /// <summary>
        /// Загрузка успешно завершена
        /// </summary>
        public bool IsFillSuccessfullyCompleted { get; private set; }

Пример:

        private void objectListView1_AfterFillData(object sender, EventArgs e)
        {
            if (e is AfterFillDataEventArgs)
            {
                var afterFillDataEventArgs = e as AfterFillDataEventArgs;
                MessageBox.Show(
                    string.Format("CancelByUser: {0}, Exception: {1}, IsFillSuccessfullyCompleted: {2} ",
                    afterFillDataEventArgs.CanceledByUser, afterFillDataEventArgs.Exception, afterFillDataEventArgs.IsFillSuccessfullyCompleted));
            }
        }

Отслеживание окончания загрузки данных

Отследить окончание загрузки данных в ObjectListView возможно с помощью события AfterFillData и свойства IsDataLoaded. Событие AfterFillData происходит при окончании загрузки, а свойство IsDataLoaded принимает истинное значение, в случае если данные загружены и ObjectListView не находится в состоянии обновления.

Состояние списка

Выделение строки

Отследить изменение состояния строки (выделена или нет) у ObjectListView возможно с помощью события MarkObjectChanged. В качестве аргумента события передается DataObjectDef объекта и состояние строки.

public event MarkObjectChangedEventHandler MarkObjectChanged;

ObjectListView не содержит никакой функциональности по действиям (создание, сохранение и т.д.) с объектами данных, отображаемыми в списке. Программист должен написать код, «ловящий» события, происходящие в ObjectListView, и отрабатывающий соответствующую реакцию. Наоборот, если в программе произошло некоторое действие, необходимо сообщить о нём ObjectListView для адекватного отображения объектов.

Для перехвата событий, необходимо:

  • Повесить обработчик на событие CreateObject при реализации действий по созданию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку создания объекта;
  • Повесить обработчик на событие EditObject при реализации действий по редактированию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку редактирования объекта;
  • Повесить обработчик на событие DeleteObject при реализации действий по созданию объекта данных, событие происходит, когда пользователь нажимает в панели инструментов кнопку удаления объекта;

Для информирования ObjectListView о произошедших действиях, необходимо:

  • Вызвать метод AddObject, если объект данных был добавлен, он отобразится в ObjectListView (Важно! Не вызывайте данный метод до обработки объекта данных сервисом данных, поскольку это может вызвать ошибку, т.к. ObjectListView попытается прочитать объект данных из хранилища, где его ещё нет);
  • Вызвать метод UpdateObject, если объект данных был изменён, тогда поля в ObjectListView поменяют значения на соответствующие в объекте данных;
  • Вызвать метод DeleteObject, если объект данных был удалён, тогда он исчезнет из ObjectListView.

Отображение подсказки для отдельных строк

В ObjectListView реализована возможность отображения подсказки для отдельных строк. Для включения данного режима необходимо установить свойство ObjectListView.ShowToolTip. Для задания текста подсказки необходимо обработать событие ObjectListView.BeforeToolTipRequired. Для настройки параметров отображения подсказки (задержки появления, длительности отображения внешнего вида) следует изменить свойства объекта ObjectListView.ToolTip.

Пример:

В данном примере выводится подсказка к ячейкам первых 5-ти столбцов.

private void objectListView1_BeforeToolTipRequired(object sender, BeforeToolTipRequiredEventArgs e)
{
     e.TipText = string.Format("Строка {0}, столбец {1}", e.Row, e.Column);
     if (e.Column>5)
         e.Cancel = true;
}

Дополнительные события, свойства и методы

  • OnChangeCurrentObject — происходит, когда пользователь выбирает объект (перемещает курсор) в списке.
  • ObjectDblClick — gроисходит, когда на текущем объекте выполнен DblClick.
  • ObjectCount — получить количество объектов в списке.
  • GetObject — получение объекта данных непосредственно из списка по различным критериям.
  • FillData — заполнение списка данными (обновление).
  • HideToolBar — показать/спрятать тулбар.
  • UseToolBar — использовать нестандартный тулбар, какой-то другой, снаружи, на него автоматически «намазываются» кнопки от ObjectListView.
  • ClearCache — очистка внутреннего кеша.
  • ObjectListView.BeforeRefresh - происходит перед обновлением данных в списке. Обновление данных может быть инициировано нажатием пользователем кнопки «Обновить» или вызовом метода Refresh.
  • SetObject - метод для добавления объекта в список.
  • SetObjects - метод для добавления нескольких объектов в список.