Алгоритм создания списка, установка типа и представление, включение данных

Так как ObjectListView не используется для отображения данных не из БД, стандартного способа отобразить список объектов, созданных прямо в коде, нет.

Тем не менее существует алгоритм решения этой задачи.

Алгоритм добавления данных

  • Создать список данных, которые будут отображены.
  • Установить у ObjectListView используемый тип и представление.
  • Установить LimitFunction так, чтобы из базы ничего не подгрузилось.
  • Вызвать метод SetObjects.

Создание списка данных

В первую очередь создается собственно список данных, которые необходимо будет загрузить в ObjectListView. Не обязательно, чтобы эти данные были в базе.

Для примера используется переменная myObjects, в которую будет сохранен созданный список объектов.

Установка используемого типа и представления

Например, необходимо отображать объекты типа Адрес, по представлению АдресL.

В коде кстанавливаются настройки ObjectListView:

objectListView1.DataObjectTypes = new[] { typeof(Адрес) };
objectListView1.ViewName = "АдресL";

Блокировка подгрузки данных из базы

Чтобы данные из базы не подгружались во время обновления (нажатия на кнопку Refresh), необходимо установить LimitFunction у ObjectListView так, чтобы условие никогда не выполнялось. Например, следующим образом:

SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef;
objectListView1.LimitFunction = langdef.GetFunction(langdef.funcSQL, "1 = 2");

Добавление объектов в список

Чтобы добавить объекты в список, достаточно вызвать метод SetObjects у ObjectListView:

objectListView1.SetObjects(myObjects.ToArray());

Однако, если вызвать этот метод в момент создания формы, то данные потеряются при нажатии на кнопку Refresh.

Чтобы данные сохранялись, необходимо вызывать этот метод после загрузки данных из базы. Для этого необходимо подписаться на событие AfterFillData и добавить в обработчик вызов метода SetObjects, к примеру так:

objectListView1.AfterFillData += (o, s) =>
{
	objectListView1.SetObjects(myObjects.ToArray());
};