C # ReportViewer с UnTyped источниками данных - PullRequest
3 голосов
/ 06 января 2010

Я проверил историю вопросов, нажал на Google и другие результаты и до сих пор полностью сбит с толку насчет C # reportViewer. Кажется, он хочет работать только с «типизированными» наборами данных. Как спрашивали многие другие люди, и я не видел реальных ответов, возможно, новая публикация вызовет что-то новое.

В простейшем виде у меня есть бизнес-объект, который выполняет запрос из базы данных. Я знаю, что представляют собой результирующие столбцы, и хочу, чтобы он был включен в конкретный отчет, который должным образом «отформатирован» по мере необходимости, в отличие от простого столбцового дампа.

Поскольку запрос возвращает объект «DataTable», но ни один из известных столбцов не «напечатан», я попал в ловушку.

Как уже упоминалось в других постах, если у меня есть система из 200+ таблиц, 400+ представлений и 200+ хранимых процедур, я не хочу все печатать. Особенно, если я делаю новый запрос, который является результатом объединения отдельных таблиц из какой-то новой хранимой процедуры.

Не должно быть так сложно составить отчет. Если я введу неправильный столбец или SUM (), COUNT () или что-то другое, то это моя ошибка, но, по крайней мере, позвольте мне добавить нетипизированную таблицу в отчет.

Помощь ...

1 Ответ

3 голосов
/ 06 января 2010

Столбцы DataTable не нужно вводить, все они могут использовать строку по умолчанию.

Я добавил DataSet в свой проект и спроектировал DataSet в соответствии с моим запросом. Я оставил все столбцы в виде строк. В RDLC я настроил таблицу, используя этот набор данных в качестве источника данных, строго для целей времени разработки.

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

        DataTable dt = new DataTable();
        DataColumn dc = dt.Columns.Add();
        dc.ColumnName = "DataColumn1";

        dc = dt.Columns.Add();
        dc.ColumnName = "DataColumn2";

        dt.Rows.Add(new object[] { "Frank", 32 });

        this.reportViewer1.LocalReport.DataSources.Clear();
        this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1_DataTable1", dt));

        this.reportViewer1.RefreshReport();  

Во время выполнения ReportViewer загружает этот DataTable в качестве источника данных и использует его для заполнения таблицы.

Это то, что вы ищете?

...