Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблема с разным количеством столбцов / 5 сообщений из 5, страница 1 из 1
25.02.2010, 16:17
    #36488366
vakarev_dmitri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разным количеством столбцов
короче дали мне доработать проект, в нем нужно добавить несколько таблиц при помощи Crystal Report. Я все сделал за исключением одного отчетика.
Суть в следующем.
У меня есть список студентов и у них есть оценки по предметам у каждой группы соответственно разное число предметов. Каждая оценка реализована отдельной записью. Так как число предметов разное то я использовал галочку Format with Multiple Columns. Но вот проблема мне нужно, чтобы слева был список студентов а они никак не хотят добавляться. Неужели единственный вариант это использовать Subreport? Подскажите пожалуйста, ну прям оч надо.
...
Рейтинг: 0 / 0
26.02.2010, 14:50
    #36490288
ustass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разным количеством столбцов
Cross tab
...
Рейтинг: 0 / 0
26.02.2010, 19:17
    #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
27.02.2010, 13:27
    #36492030
ustass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разным количеством столбцов
Начнем с того, что в вопросе нужно указывать точную версию продуктов, тип(серверная/локальная) использования и желаемый результат.
Вначале вы пишите что у вас есть набор данных {студент, предмет, оценка} и спрашиваете чем можно решить проблему различных наборов предметов у некоторого подмножества данных. На что получаете вполне простой и логичный ответ Cross tab.
После чего появляется непонятно для какой цели код программы, в котором нет ни какого упоминания CR, но зато есть какие то запросы к СУБД и циклы.
После чего задается вопрос а как объединить кусок программы с элементом отчета.
И совсем непонятно, что имелось в виду под авторнужно добавить несколько таблиц при помощи Crystal Report
...
Рейтинг: 0 / 0
27.02.2010, 14:34
    #36492202
vakarev_dmitri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разным количеством столбцов
Простите пожалуйста за невежественность. Не оценил возможности Cross tab. Все действительно решилось оч просто и без циклов.
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблема с разным количеством столбцов / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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