Реализация привязываемого объекта с динамическими свойствами - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь создать объект в C #, который можно привязать к виду сетки. У меня есть три цели для достижения этой цели. EntryTable, EntryRow и EntryValue. EntryTable содержит список EntryRows, а EntryRow содержит список EntryValues. Объект значения Entry состоит из имени атрибута и значения.

Структура данных выглядит следующим образом:

public class EntryTable 
{
    private List<EntryRow> _lERTable = null;
    ...

public class EntryRow
{
    private List<EntryValue> _lEVRow = null;
    ...

public class EntryValue
{
    private string _sFieldName;
    private string _sValue;
    ...

Мне известно, что привязываемый объект по умолчанию будет привязываться только к видимым свойствам верхнего уровня. В результате я вижу только список имен объектов EntryRow, например:

-------------------------------------------
Norseman.CommandN.Data.CNStore.EntryRow    |
-------------------------------------------
Norseman.CommandN.Data.CNStore.EntryRow    |
------------------------------------------

Моя конечная цель - иметь возможность привязать заполненный EntryTable к сетке и заставить объект EntryTable распознавать все имена атрибутов во всех EntryRows и отображать данные в виде сетки. Суть в том, что не все EntryRow будут иметь одинаковое количество EntryValues. Например, если я хранил сотрудников, некоторые сотрудники могут не иметь атрибута manager.

Я хочу обработать данные следующим образом:

First Name |    Last Name  |     Position             |     Manager
-----------------------------------------------------------------
Andrew     |    Milton     |    Software Developer    |     null
-----------------------------------------------------------------
Barry      |   Singleton   |    Web Developer         |     Marcus Manicotti

Я рассмотрел возможность ввода своих данных в традиционную модель System.Data.DataTable, но я бы предпочел реализовать собственный объект, чтобы избежать накладных расходов.

Любая помощь в этом вопросе будет принята с благодарностью.

1 Ответ

1 голос
/ 17 марта 2011

Если вы используете WinForms, вы можете внедрить ITypedList в коллекцию.Если вы используете WPF, вы можете использовать ICustomTypeDescriptor для каждого элемента.

...