Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/68: Рейтинг темы: голосов - 68, средняя оценка - 4.81
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
1

Автоматическое создание отчета с помощью ReportViewer

19.01.2012, 12:45. Показов 12610. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Есть WindowForm аппликация. На неи по кнопке создается отчет с помощью ReportVierew.
Подскажите, пожалуйста, возможно ли (и как?) помощью ReportVierew создавать отчет автоматически? Т.е. , например, в определенное время запускается программа в ScheduleTask, и каким-то образом вызывается работа этого ReportVierew, создается отчет и посылается, например на email. Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2012, 12:45
Ответы с готовыми решениями:

Создание отчета в reportViewer
Уважаемые программисты, владеющие языком C#! Делаю отчет в reportViewer. В группу столбцов...

Создание отчета в reportViewer
Создана база данных в access, хочу сделать отчет в reportViewer. Столкнулся с такой проблемой, а...

Создание отчета в reportViewer
Здраствуйте. Вообщем такая проблема, хочу сделать отчет при помощи компонента reportViewer, но у...

Создание отчета с выборкой по textBox в ReportViewer
Всем доброго времени суток, возникла проблема при формировании отчета в VisualStudio 2019 Отчет...

26
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
15.02.2012, 16:33 21
Author24 — интернет-сервис помощи студентам
iva_a, поскольку файл Мой_Report.rdlc представляет собой xml файл полностью описывающий всю структуру отчета,то похоже надо просто генерировать в своей программе такой файл по необходимым данным(можно так-же сделать несколько типичных заготовок и на их основе формировать отчет)
создавать такой отчет, понятно трудоемко, но я так понимаю, что создав несколько заготовок, потом их комбинировать не проблема.
Вывод- разберись с формированием xml документа, и вот оно счатье!
По моему скромному мнению, это отличная идея(а может и единственно верная)
Удачи!
Сообщай результаты.
1
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
15.02.2012, 16:55  [ТС] 22
Т.е., если я правильно тебя поняла, данные записывать не в csv фаил, как я собиралась, а создавать xml фаил вручную, дать ему расширение dlc, а дальше, как прежде? Тогда встречныи вопрос, как преобразовать csv в xml?

Добавлено через 5 минут
A может есть какая библиотека в net, которая позволяет конвертировать форматы, и о которои я просто не знаю?
0
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
15.02.2012, 17:08 23
Нет!!! Неправильно поняла!
Твой вопрос звучал так-
А если я не знаю, сколько столбцов у меня будет в таблице. Т.е. я обрашаюсь к базе данных на сервере, выбираю по определенному алгоритму данные из разных таблиц,и должна создат
рапорт. А я не знаю заранее из скольких столбцов будет состоять моя итоговая таблица. В 1 случае из 3, а потом 99. Как мне создать шаблон для рапорта?
Вот я и предложил строить форму(таблицу) отчета автоматически по имеющимся данным а не создавать заранее статический отчет.
Строим отчет динамически по данным меняющимся каждый раз.
создавать xml фаил вручную, дать ему расширение rdlc , а дальше, как прежде?
А вот это поняла правильно!!! Только не вручную а программно!

Только что попробовал вырезать и вставлять куски в этот файл, сработало отлично! Вид отчета меняется!
1
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
15.02.2012, 17:16  [ТС] 24
Ясно, что понятия не имею как это делать У меня болшая база данных, по которои я бегаю со всякими запросами, в результате получаю данные то от 2 датчиков, то от 100 и т.д.В csv данные закинуть - милое дело. Открыла rdlc в xml edtitor - ничего не понимаю
0
0 / 0 / 0
Регистрация: 25.03.2013
Сообщений: 11
25.03.2013, 10:57 25
Строим отчет динамически, программно - по данным меняющимся каждый раз.

Как это сделать? Ответ пожалуйста по подробнее. Заранее благодарен.

Добавлено через 3 минуты
Как создать отчет (ReportViewer - C#) динамически, программно - по данным меняющимся каждый раз?
0
3 / 3 / 3
Регистрация: 28.05.2013
Сообщений: 65
05.06.2013, 17:02 26
а вопрос до сих пор актуален
0
22 / 22 / 1
Регистрация: 25.02.2012
Сообщений: 132
08.06.2013, 21:02 27
Как-то долгое время разбирался с этим мастером создания отчётов, но потом плюнул и сделал генерацию отчёта через индексированную отрисовку таблиц в Excel и занесения данных в эту таблицу.

ВОТ ПРИМЕР того, как у меня получался отчёт. Количество таблиц зависело от количества участков, которые выводятся в отчёт.

Добавлено через 3 минуты
Код в догонку. Один из примеров возможности формирования отчёта. Ох и намаялся я с индексами на ранних этапах рисования таблицы "наощупь"
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Excel.Application oXL;
            Excel._Workbook oWB;
            Excel._Worksheet oSheet;
 
            oXL = new Excel.Application();
            oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
            oSheet = (Excel._Worksheet)oWB.ActiveSheet;
 
            int secCount = 0;
 
            for (int i = 0; i < sectionsGrid.RowCount; i++)
            {
                SqlCeCommand calcStat = new SqlCeCommand("Select * FROM sec" + sectionsGrid.Rows[i].Cells[0].Value.ToString() + "calc;", conn);
                
                try
                {
                    using (SqlCeDataReader headers = calcStat.ExecuteReader())
                    {
                        if (headers.FieldCount > 1)
                        {
                                        int r = 0;
                                        string[,] date2;
                                        date2 = new string[10, 9];
 
                                        while (headers.Read())
                                        {
                                            for (int f = 0; f < headers.FieldCount - 1; f++)
                                                date2[r, f] = headers.GetValue(f + 1).ToString();
                                            r++;
                                        }
 
                                        headers.Close();
 
                                        /*-----------------------------ДАЛЬШЕ КОД РАБОТАЕТ ИСКЛЮЧИТЕЛЬНО НА ЧЁРНОЙ МАГИИ------------------------------*/
                                        /*----Отрисовка таблицы-----*/
                                        for (int o = 17 * secCount + 1; o < 17 * secCount + 5; o++)
                                            oSheet.get_Range(String.Format("B{0}", o), String.Format("O{0}", o)).Merge();
                                        oSheet.get_Range(String.Format("A{0}", 17 * secCount + 1), String.Format("A{0}", 17 * secCount + 17)).ColumnWidth = 3;
                                        oSheet.get_Range(String.Format("P{0}", 17 * secCount + 1), String.Format("P{0}", 17 * secCount + 17)).ColumnWidth = 3;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 17)).WrapText = true;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 1), String.Format("O{0}", 17 * secCount + 17)).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 1), String.Format("O{0}", 17 * secCount + 17)).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 6)).Font.Bold = true;
                                        
                                        oSheet.Rows[17 * secCount + 5].RowHeight = 22;
                                        oSheet.Rows[17 * secCount + 6].RowHeight = 30;
                                        oSheet.get_Range(String.Format("D{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 6)).ColumnWidth = 14.14;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("B{0}", 17 * secCount + 14)).HorizontalAlignment = Excel.XlVAlign.xlVAlignJustify;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("B{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("C{0}", 17 * secCount + 5), String.Format("C{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("D{0}", 17 * secCount + 5), String.Format("D{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("E{0}", 17 * secCount + 5), String.Format("E{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("F{0}", 17 * secCount + 5), String.Format("F{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("G{0}", 17 * secCount + 5), String.Format("G{0}", 17 * secCount + 6)).Merge();
                                        oSheet.get_Range(String.Format("H{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 5)).Merge();
                                        oSheet.get_Range(String.Format("D{0}", 17 * secCount + 7), String.Format("D{0}", 17 * secCount + 14)).Merge();
                                        oSheet.get_Range(String.Format("E{0}", 17 * secCount + 7), String.Format("E{0}", 17 * secCount + 14)).Merge();
                                        oSheet.get_Range(String.Format("F{0}", 17 * secCount + 7), String.Format("F{0}", 17 * secCount + 14)).Merge();
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("B{0}", 17 * secCount + 17)).ColumnWidth = 20;
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 14)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 6)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("B{0}", 17 * secCount + 5), String.Format("B{0}", 17 * secCount + 14)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("H{0}", 17 * secCount + 5), String.Format("O{0}", 17 * secCount + 6)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("H{0}", 17 * secCount + 6), String.Format("O{0}", 17 * secCount + 6)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("H{0}", 17 * secCount + 7), String.Format("O{0}", 17 * secCount + 14)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("D{0}", 17 * secCount + 5), String.Format("D{0}", 17 * secCount + 14)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
                                        oSheet.get_Range(String.Format("F{0}", 17 * secCount + 5), String.Format("F{0}", 17 * secCount + 14)).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic);
 
                                        /*----Занесение данных-----*/
                                        oSheet.Cells[2, 2] = "Результаты расчета максимально-разовых выбросов автотранспорта на исследованных участках УДС г. Тирасполь";
                                        oSheet.Cells[2, 2].Font.Bold = true;
                                        oSheet.Cells[2, 2].Font.Size = 13;
                                        oSheet.Cells[17 * secCount + 4, 2] = "Участок №" + sectionsGrid.Rows[i].Cells[0].Value.ToString() + " " + sectionsGrid.Rows[i].Cells[1].Value.ToString();
                                        oSheet.Cells[17 * secCount + 5, 2] = "Наименование группы автомобилей";
                                        oSheet.Cells[17 * secCount + 5, 3] = "№ группы";
                                        oSheet.Cells[17 * secCount + 5, 4] = "Длина участка, км";
                                        oSheet.Cells[17 * secCount + 5, 5] = "Поправ. коэфф.    r";
                                        oSheet.Cells[17 * secCount + 5, 6] = "Скорость движен.,  км/ч";
                                        oSheet.Cells[17 * secCount + 5, 7] = "Среднее кол-во машин";
                                        oSheet.Cells[17 * secCount + 7, 2] = "Легковые на бенз.";
                                        oSheet.Cells[17 * secCount + 8, 2] = "Легковые на д/т";
                                        oSheet.Cells[17 * secCount + 9, 2] = "Грузов. до 3 т и м/автобус на бенз.";
                                        oSheet.Cells[17 * secCount + 10, 2] = "Грузовые более 3 т на бензине";
                                        oSheet.Cells[17 * secCount + 11, 2] = "Автобусы на бенз.";
                                        oSheet.Cells[17 * secCount + 12, 2] = "Грузовые на д/т";
                                        oSheet.Cells[17 * secCount + 13, 2] = "Автобусы на д/т";
                                        oSheet.Cells[17 * secCount + 14, 2] = "Грузовые на газе";
                                        oSheet.Cells[17 * secCount + 7, 3] = "I";
                                        oSheet.Cells[17 * secCount + 8, 3] = "Iд";
                                        oSheet.Cells[17 * secCount + 9, 3] = "II";
                                        oSheet.Cells[17 * secCount + 10, 3] = "III";
                                        oSheet.Cells[17 * secCount + 11, 3] = "IV";
                                        oSheet.Cells[17 * secCount + 12, 3] = "V";
                                        oSheet.Cells[17 * secCount + 13, 3] = "VI";
                                        oSheet.Cells[17 * secCount + 14, 3] = "VII";
                                        oSheet.Cells[17 * secCount + 15, 2] = "Всего:";
                                        oSheet.Cells[17 * secCount + 5, 8] = "Выброс, г/сек";
                                        oSheet.Cells[17 * secCount + 6, 8] = "СО";
                                        oSheet.Cells[17 * secCount + 6, 9] = "NOx";
                                        oSheet.Cells[17 * secCount + 6, 10] = "CH";
                                        oSheet.Cells[17 * secCount + 6, 11] = "C";
                                        oSheet.Cells[17 * secCount + 6, 12] = "SO2";
                                        oSheet.Cells[17 * secCount + 6, 13] = "Формальдегид";
                                        oSheet.Cells[17 * secCount + 6, 14] = "Pb";
                                        oSheet.Cells[17 * secCount + 6, 15] = "БП";
                                        oSheet.Cells[17 * secCount + 17, 8] = "NO2";
                                        oSheet.Cells[17 * secCount + 17, 9] = "NO";
                                        oSheet.Cells[17 * secCount + 17, 10] = "бензин";
                                        oSheet.Cells[17 * secCount + 17, 11] = "керосин";
                                        oSheet.Cells[17 * secCount + 17, 12] = "метан";
 
                                        oSheet.get_Range(String.Format("G{0}", 17 * secCount + 7), String.Format("O{0}", 17 * secCount + 16)).Value = date2;
                                        //oSheet.get_Range(String.Format("G{0}", 17 * secCount + 15), String.Format("O{0}", 17 * secCount + 15)).Value = date1;
 
                                        oSheet.Cells[17 * secCount + 7, 4].Value = sectionsGrid.Rows[i].Cells[3].Value.ToString();
                                        oSheet.Cells[17 * secCount + 7, 5].Value = sectionsGrid.Rows[i].Cells[5].Value.ToString();
                                        oSheet.Cells[17 * secCount + 7, 6].Value = sectionsGrid.Rows[i].Cells[2].Value.ToString();
 
                                        //oSheet.get_Range(String.Format("D{0}", 17 * secCount + 7), String.Format("O{0}", 17 * secCount + 16)).NumberFormat = "";
                                        secCount++;
                        }
                    }
                }
                catch 
                {
                    PoupupNotify msg = new PoupupNotify();
                    msg.msg_lbl.Text = "Расчёт  по участку #" + sectionsGrid.Rows[i].Cells[0].Value.ToString() + " не были произведены. Данный участок пропущен и не будет выведен в отчёт.";
                    msg.TopMost = false;
                    msg.ShowDialog();
                    msg._close.Start();
                    //MessageBox.Show("Расчёт  по участку #" + sectionsGrid.Rows[i].Cells[0].Value.ToString() + " не были произведены. Данный участок пропущен и не будет выведен в отчёт.", "Внимание!"); 
                }
            }
 
            oXL.Visible = true;
        }
1
08.06.2013, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2013, 21:02
Помогаю со студенческими работами здесь

ReportViewer создание отчета
Добрый день, не первый час мучаюсь над создание отчета через ReportViewer. Используя мастер добился...

Создание отчета с выборкой по датам в ReportViewer
Здравствуйте. БД Access. Есть одна таблица. Сделал с помощью мастера отчетов и ReportViewer...

VS 2015 + ReportViewer + Access. Создание отчета с подстановочными полями
Всем привет. С C# плохо знаком, программировал на Delphi. Имеется база данных в которой есть...

Создание отчета с помощью Quick Report Wizard
Помогие мне разобраться в созданиии отчета с помощью мастера. Входим File-&gt;New-&gt;Other. Переходим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru