powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблема с разным количеством столбцов
5 сообщений из 5, страница 1 из 1
Проблема с разным количеством столбцов
    #36488366
vakarev_dmitri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче дали мне доработать проект, в нем нужно добавить несколько таблиц при помощи Crystal Report. Я все сделал за исключением одного отчетика.
Суть в следующем.
У меня есть список студентов и у них есть оценки по предметам у каждой группы соответственно разное число предметов. Каждая оценка реализована отдельной записью. Так как число предметов разное то я использовал галочку Format with Multiple Columns. Но вот проблема мне нужно, чтобы слева был список студентов а они никак не хотят добавляться. Неужели единственный вариант это использовать Subreport? Подскажите пожалуйста, ну прям оч надо.
...
Рейтинг: 0 / 0
Проблема с разным количеством столбцов
    #36490288
ustass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cross tab
...
Рейтинг: 0 / 0
Проблема с разным количеством столбцов
    #36491023
vakarev_dmitri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ustass,
извините, не могу сообразить как это можно реализовать Cross tab'ом?
если можно связать через DataTable, то как? нужно сформировать схему, далее использовать ReadXmlSchema, а чего дальше делать?

Код: plaintext
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.
            try
            {
                //создаем основную таблицу
                DataTable dt = new DataTable();
                dt.Columns.Add("ФИО"); 

                DataTable dtPredmet = new DataTable();

                using (
                    OracleConnection Conn = new OracleConnection(ConnectionStr.GetConnString()))
                {
                    Conn.Open();
                    OracleCommand cmd = Conn.CreateCommand();
                    OracleCommand cmdUsp = Conn.CreateCommand();
                    OracleCommand cmdPred = Conn.CreateCommand();
                    OracleDataAdapter da = new OracleDataAdapter(cmdPred);

                    cmdPred.CommandText = @"SELECT     PREDMET.NAME_PREDMET, PREDMET.ID_PREDMET
FROM         U_PLAN INNER JOIN
PREDMET ON U_PLAN.ID_PREDMET = PREDMET.ID_PREDMET
WHERE     (U_PLAN.NUM_GROUP = 'ВТ-00') AND (U_PLAN.NUM_SEMESTR = 3)";
                    
                    // определяем число и названия столбцов
                    da.Fill(dtPredmet);

                    for (int i =  0 ; i < dtPredmet.Rows.Count; i++)
                    {
                        dt.Columns.Add((string)dtPredmet.Rows[i].ItemArray[ 0 ]);
                    }

                    // смотрим список студентов
                    cmd = Conn.CreateCommand();
                    cmd.CommandText = @"SELECT     P.SURNAME || ' ' || P.NAME_MAN || ' ' || P.PATNAME AS фио, C.ID_CONTINGENT

FROM         CONTINGENT C INNER JOIN
                      PEOPLES P ON C.ID_MAN = P.ID_MAN
WHERE     (C.IS_STUDENT = 1) AND (C.NUM_GROUP = :Param1)";

                    cmd.Parameters.AddWithValue(":Param1", "ВТ-00");


                    // успеваемость этих студентов
                    cmdUsp = Conn.CreateCommand();
                    cmdUsp.CommandText = @"SELECT      USPEVAEMOST.BALL_EXZ,
U_PLAN.ID_PREDMET
FROM         PEOPLES INNER JOIN
                      CONTINGENT ON PEOPLES.ID_MAN = CONTINGENT.ID_MAN INNER JOIN
                      USPEVAEMOST ON CONTINGENT.ID_CONTINGENT = USPEVAEMOST.ID_CONTINGENT INNER JOIN
                      U_PLAN ON USPEVAEMOST.ID_PREDMET = U_PLAN.ID_PREDMET AND USPEVAEMOST.NUM_SEMESTR = U_PLAN.NUM_SEMESTR
WHERE     (USPEVAEMOST.NUM_SEMESTR = :Num_Semestr) AND (U_PLAN.NUM_GROUP = :Param1) AND (CONTINGENT.ID_CONTINGENT = :ID_People)";

                    cmdUsp.Parameters.AddWithValue(":Num_Semestr",  3 );
                    cmdUsp.Parameters.AddWithValue(":Param1", "ВТ-00");
                    OracleParameter pID_People = cmdUsp.Parameters.Add(":ID_People", OracleType.Int32);


                    using (OracleDataReader rdr = cmd.ExecuteReader())
                    {
                    // определяем текущего студента
                        while (rdr.Read())
                        {
                            DataRow dr = dt.NewRow();
                            // заполняем его ФИО
                            dr[ 0 ] = rdr.GetString( 0 );
                            // его ID
                            pID_People.Value = rdr.GetInt32( 1 );
                            using (OracleDataReader rdrUsp = cmdUsp.ExecuteReader())
                            {
                                // смотрим его успеваемость
                                while (rdrUsp.Read())
                                {
                                    int j =  0 , id = rdrUsp.GetInt32( 1 );

                                    while ((j < dtPredmet.Rows.Count) && ((decimal)dtPredmet.Rows[j].ItemArray[ 1 ] != id))
                                    {
                                        j++;

                                    }
                                    // если оценка есть то заполняем
                                    if (j < dtPredmet.Rows.Count)
                                    {
                                        dr[j+ 1 ] = rdrUsp.GetInt32( 0 );
                                    }
                                }
                            }                            
                            
                            dt.Rows.Add(dr);
                        }
                    }
                    Conn.Close();
                }
                dgv.DataSource = dt;
                dgv.Columns[ 0 ].Width =  225 ;
            }
            catch(Exception ex) 
            {                
                MessageBox.Show(ex.Message);
            }
...
Рейтинг: 0 / 0
Проблема с разным количеством столбцов
    #36492030
ustass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начнем с того, что в вопросе нужно указывать точную версию продуктов, тип(серверная/локальная) использования и желаемый результат.
Вначале вы пишите что у вас есть набор данных {студент, предмет, оценка} и спрашиваете чем можно решить проблему различных наборов предметов у некоторого подмножества данных. На что получаете вполне простой и логичный ответ Cross tab.
После чего появляется непонятно для какой цели код программы, в котором нет ни какого упоминания CR, но зато есть какие то запросы к СУБД и циклы.
После чего задается вопрос а как объединить кусок программы с элементом отчета.
И совсем непонятно, что имелось в виду под авторнужно добавить несколько таблиц при помощи Crystal Report
...
Рейтинг: 0 / 0
Проблема с разным количеством столбцов
    #36492202
vakarev_dmitri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите пожалуйста за невежественность. Не оценил возможности Cross tab. Все действительно решилось оч просто и без циклов.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблема с разным количеством столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]