Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DSD_Spiskovye_struktury_dannykh_na_baze_massivo...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.59 Mб
Скачать

6.3Отображение содержимого мультисписка

Для взаимодействия - локализации и визуализации требуемого уровня или содержимого элемента мультисписка в качестве одной из возможностей может использоваться компонент ListView – просмотр списка.

Концептуально компонент ListView, так же как и компонент TreeView, предназначен для выбора и показа нескольких элементов мультисписковой (древовидной) структуры данных. Следовательно, компонент ListView, подобно компоненту TreeView, обладает соответсвующими средствами по локализации (селектированию) отдельных элементов мультисписка и средствами по доступу к их потомкам или владельцам (предкам). Однако, в отличие от компонета TreeView, в компоненте ListView допускается обработка не более двух уровней иерархии элементов мультисписка. Это связано с тем, что визуальные возможности TListView нацелены на более подробное отображение информации, хранящейся на верхнем и нижнем уровнях двухуровневого мультисписка. В действительности этот процесс можно рассматривать как рекрсивный, когда подуровень верхнего уровня двухуровневого мультисписка является верхним уровнем для следующего уровня двухуровневого мультисписка и т.д.

Весьма эффективным является совместное использование компонент TreeView и ListView. Наиболее ярким примером сочетание совместного использования компонент TreeView и ListView является Проводник Windows.

Компонент ListView показывает свои элементы в одном из четырех стилей в виде одной или нескольких вертикальных колонок с пиктограммами или без них.

Три из этих четырех стилей компонента ListView позволяют непосредственно отобразить только один - верхний уровень мультисписка и по требованию перейти к вложенному уроню выделенного элемента верхнего уровня.

Четвертый из этих стилей - отчет (таблица), является наиболее полной формой визуализации двухуровневого мультисписка. В этом случае компонент ListView позволяет визуализировать мультисписок в виде определенным образом заполненой таблицы.

В первом столбце такой таблицы по вертикали отображаются элементы верхнего уровня мультисписка, а для каждого такого элемента во всех остальных столбцах таблицы по горизонтали – элементы соответствующего вложенного списка. В результате обработка первого столбца и обработка остальных столбцов отчета несколько отличаются друг от друга. Так добавление (вставка) или удаление из таблицы элемента верхнего уровня мультисписка влекут за собой добавление (вставку) или удаление строки таблицы. А обработка соответствующих элементов нижнего уровня мультисписка влечет обработку содержимого ячеек соответсвующих строк таблицы (см. далее).

Для просмотра данных в комопненте ListView в виде таблицы необходимо свойству View занести значение Details. Если заголовки столбцов для элемента управления ListView не заданы, а свойство View установлено равным View.Details, в элементе управления ListView не будет отображаться никаких элементов.

В целях выполняемого КП в настоящем пособии рассматриваются только возможности компонента ListView по визуализации двухуровневого мультисписка. Однако для программиста, владеющего возможностями компонента TreeView, не представляет сложности самостоятельное овладение всеми возможностями компонента ListView.

Для построения просмотрщика двухуровневого мультисписка списка в Visual Studio .Net используются три типа данных для описания соответственно: просмотрщика списка - ListView, элемент верхнего уровня - LisViewItem и подэлемента элемента верхнего уровня – ListViewItem.ListViewSubItem, основные свойства (поля) и методы которые рассматриваются ниже.

Класс ListView - просмотрщик списка, содержит значительное количество полей разного назначения, но, с точки зрения отображения содержимого списка, можно выделить ряд полей, которые приводятся ниже.

Имя поля

Тип

значения

Содержимое

Columns

ColumnHeaderCollection*

содержит коллекцию заголовков столбцов. Свойство используется для удаления или добавления колонок. Используется если свойство View=Detailst

Items

ListViewItemCollection*

Содержит коллекцию элементов верхнего уровня мультисписка в ListView

View

class View

Определяет стиль показа элементов списка. При View=Details отображается таблица.

С классом ListView связано несколько методов, однако в рамках рассматриваемого материала эти методы существенного интереса не представляют.

При программном заполнении компонента основную роль играют свойства Columns и Items класса ListView.

Свойство Columns имеет тип ListView.ColumnHeaderCollection. Класс ListView.ColumnHeaderCollection - хранит заголовки столбцов (объекты ColumnHeader), отображающиеся в ListView при установке свойства View равным Details. Когда ListView отображает столбцы, каждый элемент и его подэлементы размещаются в своем собственном столбце. С этим свойством связан метод Add, который в качестве параметра получает строку, и служит для именования соответствующего столбца таблицы.

Свойство Items имеет тип ListViewItemCollection*. Класс ListViewItemCollection - список всех элементов верхнего уровня, имеет значительное количество свойств, но для выполняемого КП интерес представляют следующие:

Имя поля

Тип

значения

Содержимое

Count

int

Количество элементов в списке элементов Items

Item[Index: integer]

ListViewItem*

Обеспечивает индексный доступ к элементам списка Items

С классом ListViewItemCollection - список всех элементов верхнего уровня, связан ряд методов, наиболее существенные из которых приводятся ниже.

Название метода

Назначение

ListViewItem* Add(String* Text)

Создает новый элемент списка с заданным текстом и добавляет его к списку

ListViewItem* Insert (int Index, String* Text)

Создает новый элемент списка со значением Text и вставляет его в указанную позицию

void Clear()

Удаляет весь список элементов

void RemoveAt (int Index)

Удаляет элемент с индексом Index из коллекции

void RemoveByKey (String* Key)

Удаляет элемент с ключом Key из коллекции

int IndexOfKey (String* Key)

Возвращает индекс элемента с указанным ключом

Свойство Item класса ListViewItem предоставляет индексированный доступ к элементам верхнего уровня. Свойство Item имеет тип ListViewItem*.

К наиболее существенным свойствам класса ListViewItem можно отнести:

Имя поля

Тип

Значения

Содержимое

Text

String*

Получает или задает текст элемента, который отображается на экране в ListView

Index

Int

Используется для индикации позиции элемента в изображении списка элементов. Индикация начинается с позиции 0

Slected

Bool

Получает или возвращает знаечние выбран ли данный элемент

SubItems

ListViewSubItemCollection*

Обеспечивает добавление строк в колонки, расположенные справа от колонки, содержащей элементы мультисписка верхнего уровня

С классом ListViewItem связано несколько методов, большинство из которых интуитивно понятно, однако в рамках рассматриваемого материала эти методы существенного интереса не представляют.

При программном заполнении компонента одну из основных ролей играет свойство SubItems класса ListViewItem. Свойство SubItems имеет тип ListViewSubItemCollection*. С этим свойством связан ряд методов, во многом подобных методам свойсва Items класса ListViewItemCollection, который служит для хранения, добавления и удаления подэлементов списка верхнего уровня . В рамках данного КП наиболее важным является метод Add, который в качестве параметра получает строку, и служит для заполнения соответствующей колонки таблицы.

Ниже приводятся функции вывода содержимого списка университетов в компоненту ListView. Тексты процедур составлены из предположения, что они описаны в основном модуле – модуле описания формы. Если функции будут описаны в другом модуле, то имени компоненты ListView1 должен предшествовать квалификатор уточняющий имя формы, т.е. fmTree.ListView1. Подобные функции должны быть составлены для каждого уровня мультисписка.

В действительности описанные действия можно представить в виде одной функции. Выделенеи двух функций выполнено для большей наглядности использования компоненты ListView1. В функции AddColumnsU формируется заголовок компоненты, т.е. определяется количество, ширина и имена сооответвтсвующих столбцов. В процедуре ShowListU выполняется заполнение строк этой компоненты.

void AddColumnsU(System::Windows::Forms::ListView * listView)

{ ColumnHeader* NewCol; /* объявление указателя на объект Заголовок колонки*/

listView->Columns->Clear(); //удаление всех столбцов

listView->Width=570; //установка ширины ListView

listView->View=View::Details; //установка стиля ListView – в виде таблицы

NewCol=listView->Columns->Add(S"Университет");//добавление колонки 1

NewCol->Width=150; //установка ширины колонки 1

NewCol=listView->Columns->Add(S"Аккредитация");//добавление колонки 2

NewCol->Width=170; // установка ширины колонки 2

NewCol=listView->Columns->Add(S"Адрес");//добавление колонки 3

NewCol->Width=250; // установка ширины колонки 3

} /* AddColumnsU */

void ShowListU(void* PtrArrPtr,System::Windows::Forms::ListView * listView)

{

listView->Items->Clear();

int count=((int*)PtrArrPtr) [PosCnt];

if (count==0) return;

for(int i=0; i<count; i++)

{ /*создание и добавление нового элемента списка верхнего уровня – строка таблицы*/

listView->Items->Add(((TElmList*)((( void** )PtrArrPtr )[i]))->Name); /*добавление нового элемента списка нижнего уровня – ячейка таблицы – адрес*/

listView->Items->Item[i]->SubItems->Add( ( (TElmList*) ((( void** ) PtrArrPtr

)[i]))->Address);

/*добавление нового элемента списка нижнего уровня – ячейка таблицы – аккредитация*/

int akred=((TElmList*)((( void** )PtrArrPtr )[i]))->Akreditac;

String* S=Convert::ToString(akred);

listView->Items->Item[i]->SubItems->Add(S);

}

}/* ShowListU */