Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.162.247] |
|
Сообщ.
#1
,
|
|
|
Обещанный пример...
Объясню в нескольких словах смысл: В проекте есть класс Matrix - этот класс представляет собой двумерный динамический массив, в который просто добавить или удалить столбец или строку. Вобщем с ним проще работать чем со стандартным .NET массивом. Идея примера в том, чтобы отобразить этот массив через DataGrid. Как известно DataGrid работает только с одномернымии массивами. При этом объект, который присваетвается в св-во DataGrid.DataSource, должен быть наследоваться от IList или IListSource. Соответственно, если загрузить в DataGrid массив объектов одного типа, то их св-ва (properties) он представит как колонки. Список св-в DataGrid, также как и PropertyGrid , берет через класс, порожденный от ICustomTypeDescriptor. Если обмануть DataGrid и представить ему матрицу в виде одномерного массива объектов (строки матрицы), где в каждой строке колонки будут представлены в виде свойств с названиями 1, 2, 3, и т.д., тогда DataGrid легко сможет отобразить двумерную матрицу и сам создаст колонки с заголовками 1, 2, 3, и т.д. Класс Matrix порожден от интерфейса IListSource, который предоставляет DataGrid\'y одномерный список (MatrixView) объектов RowDescription. Класс RowDescription порожден от интерфейса ICustomTypeDescription и предоставляет список и описание своих свойств, через объекты ColumnDescription. Каждый такой объект, представляет колонку матрицы в виде св-ва обычного класса. За счет такого подхода, не нужно инициализировать колонки в DataGrid\'e и есть возможность отображать в нем двумерные массивы. В классе MainFrame, метод InitializeMatrix вы увидите инициализацию объекта DataGrid. В архиве Windows Application проект для Visual Studio.NET 7.1 Прикреплённый файл (20.51 Кбайт, скачиваний: 217) |