Группировка данных по категориям в WPF - PullRequest
1 голос
/ 16 апреля 2010

Вот что я пытаюсь сделать.

Динамическая категория:

  1. Столбцы могут быть 0 или более.
  2. Должен содержать 1 или более Тип столбцов .
  3. Отображается, только если любая строка содержит Тип столбца Данные, связанные с ним.

Строки данных:

  1. Будет добавлено Асинхронно .
  2. Будет сгруппировано по Common Категория столбец.
  3. Добавит динамическую категорию, если она еще не существует.
  4. Добавит столбец типа, если он это сделает еще не существует в пределах своей Динамическая категория.

Информация о платформе:

  • WPF
  • .Net 3.5 sp1
  • C #
  • MVVM

У меня есть несколько частично функциональных прототипов, но у каждого есть свой основной набор проблем. Кто-нибудь из вас может дать мне несколько советов по этому поводу?

Представьте, что это красиво оформлено. :-)

    --------------------------------------------------------------------------
    |[  Common Category  ]|[ Dynamic Category  0 ]|[   Dynamic Category N   ]|
    --------------------------------------------------------------------------
    |[Header 1]|[Header 2]|[  Type 0  ]|[ Type N ]|[  Type 0   ]|[  Type N  ]|
    --------------------------------------------------------------------------
    |[Data 2 Group]                                                          |
    --------------------------------------------------------------------------
    |  Data A  | Data 2  ||    Null    |  Data 1  ||   Data 0   |  Data 1   ||
    |  Data B  | Data 2  ||   Data 0   |   Null   ||   Data 0   |  Data 1   ||
    --------------------------------------------------------------------------
    |[Data 1 Group]                                                          |
    --------------------------------------------------------------------------
    |  Data C  | Data 1  ||    Null    |  Data 1  ||   Data 0   |  Data 1   ||
    |  Data D  | Data 1  ||    Null    |   Null   ||   Data 0   |   Null    ||
    --------------------------------------------------------------------------

Редактировать: сортировка и разбиение по страницам не нужны.

Я посмотрел на вложенные ListViews и DataGrids , динамически создающие Grid. Динамическое построение Grid и использование свойства SharedSizeGroup представляется наиболее перспективной стратегией, но меня беспокоит производительность.

Будет ли лучшим подходом считать этот динамический отчет? Если так, на что мне смотреть?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 19 апреля 2010

По-моему, вам нужен элемент управления сводной сеткой.

Есть хорошие в Инфраструктура и DevExpress

Редактировать: но, если вы сделаете это вручную, у меня будет что-то вроде этого (от макушки)

Class Data
   Public Categories() as List
   Public Types() as List
   Public table as list( of row )
End Class

Class Row
   Public Category as string
   Public Type as string
   Public Group as string
   Public Header1 as string
   Public Header2 as string
   Public cell as string
End Class

Тогда я бы закодировал функцию наподобие: (псевдокод)

function AddData( Category, Type, Group, theData )
    1. Search if the Category exist in array of categories, else add it
    2. Search if the Type exist in array of Types, else add it 
    3. add the rec
end function 

function DisplayData( )
   //show headers
   For each category in data.categories
      For each Type in data.categories
         AddColumn( Category, Type )
      next
   next
   //get the groups
   for each group in (from g in data.table select g.group).distinct
      for each category in data.categories
         for each type in data.types
            cell = (from r in data.table where r.category = category and r.type = type and r.group = group)
            if cell is nothing then
               addcell("null")
            else
               addcell(cell)
            end if
         next
      next
   next

Я думаю, что я оставил несколько строк, которые могут иметь общую категорию, но вы поймете идею.
Это не лучшее исполнение, но за ним легко следить.

...