Как мы можем это сделать на основе отчета Crystal Report на основе количества выбранных атрибутов из контрольного списка? - PullRequest
0 голосов
/ 18 ноября 2011

Я занимаюсь разработкой приложения на C # Windows Forms, я делаю отчеты Crystal на основе списка сбора данных в C #, например, у меня есть таблица с EmpID, Имя, Спонсор, Должность, Национальность и т. Д. Я привожу их в коллекциюв C # и передать его в Crystal Report, где я вижу свои атрибуты в полях базы данных, если я перетаскиваю эти поля в отчете, например, Имя, Должность, Национальность, тогда я вижу их столбцы в разделе «Сведения», нопроблема в том, что у меня есть около 25 атрибутов, и я сделал контрольный список из 25 атрибутов в C #, если я проверю 13 атрибутов, он должен составить отчет из 13 столбцов, проблема в том, что мы делаем отчет в кристаллическом отчете на основеперетаскивания полей, как я могу сделать это динамически, значит, если в контрольном списке c # выбрано 13 полей, в отчете должно быть только 13 столбцов.Пожалуйста, найдите прикрепленное изображение: «Как в настоящее время я делаю». Пожалуйста, нажмите на него правой кнопкой мыши и откройте в новом окне.enter image description here

Ответы [ 4 ]

1 голос
/ 24 ноября 2011

Я думаю, что самый простой способ приблизиться к этому, учитывая представления типов данных и всю сложность Crystal под обложками, - это расположить в отчете все 25 полей с соответствующим размером.

Затем во время выполнения вам потребуется изменить положение объектов отчета, что может быть немного сложнее из-за относительно неструктурированного способа, которым кристалл предоставляет информацию.

Способ, которым я бы подошел к этому, состоит в том, чтобы циклически проходить по объектам отчета и генерировать один SortedList для полей данных и один SortedList для полей заголовка. Они должны быть отсортированы в левом положении, чтобы вы могли обрабатывать их в порядке появления.

После того, как у вас есть отсортированные списки объектов, вы можете циклически перебирать каждый из них и, если он не был выбран пользователем, установить для ширины значение 0.

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

Надеюсь, это поможет вам решить вашу проблему.

0 голосов
/ 21 ноября 2011

Похоже, это было бы хорошим местом для перекрестного отчета. В этом случае вам необходимо добавить кросс-таблицу в верхний или нижний колонтитул отчета и передать данные в отчет со столбцом для каждого описания атрибута, а затем сгруппировать описание атрибута. Подробности смотрите ниже:

Data:

RowID  ColDesc    ColValue
1      Attr1      Value1
1      Attr2      Value2
2      Attr1      Value3

Затем вы можете добавить свою кросс-таблицу, где вашим полем строки является RowID, полем столбца является ColDesc, а полем для суммирования является ColValue. Вы можете использовать Max of summary в суммированном поле, так как оно отличается.

Это не проверено, но я считаю, что вывод для этого должен быть:

CrossTab:

       Attr1    Attr2
1      Value1   Value2
2      Value3 

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

0 голосов
/ 21 ноября 2011

Crystal Reports не будет автоматически добавлять столбцы и заголовки в отчет при наличии списка полей.

Я рекомендую использовать Сервер приложений отчетов .NET SDK для динамического изменения отчета,Ссылка включает ссылку на API, а также примеры.

0 голосов
/ 21 ноября 2011
...