Страница 1 из 1

DataSet

Добавлено: 17 сен 2012, 12:41
banzai17
Привет!
2 вопроса.
1) Может ли быть в отчете 2 источника данных?(скажем,один из запроса, другой из XML)?
2) Как "прикрутить" датасет к стимулу? Я делаю так:заполняю датасет, затем
report_ump.Dictionary.Clear();
report_ump.RegData(dataset);
report_ump.Dictionary.Synchronize();
report_ump.Render(false);
Stimulsoft.Report.Web.StiReportResponse.ResponseAsWord2007(Page, report_ump);
К сожалению,ничего не выходит,хотя датасет заполняется.
В самом .mrt файле создан источник данных из XML и указана схема(.xcd).
Подскажите,пожалуйста.Спасибо

Re: DataSet

Добавлено: 17 сен 2012, 15:01
HighAley
Здравствуйте.

1. Да, можно использовать разные источники данных в одном отчёте.

2. По данному куску кода ничего сказать не можем. Есть подозрение, что название датасета не совпадает с заданным во время дизайна.
Попробуйте, запустить дизайнер и посмотреть что там у вас получается.

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

Спасибо.

Re: DataSet

Добавлено: 17 сен 2012, 15:23
banzai17

Код: Выделить всё

private DataTable GetTableForReport(int ActID)
        {
            string query = @"select d1.InventoryNumber as inv_num,d1.ModelName as model,d1.SerialNumber as ser_num,dt.NameRu as name_obor from Devices d1
                                    left join DeviceTypes dt on d1.DeviceTypeID=dt.ID
                                    where d1.ID in(
                                    SELECT distinct d.ID
                                    from Devices d
                                    left join JobFact jf on jf.DeviceID=d.ID
                                    left join EntityBase_Act ea on ea.ID=jf.ActID
                                    where ea.ID=@ActNumber)";
            SqlConnection rep_connection = new SqlConnection(ConfigurationManager.AppSettings["ReportConnection"]);
            SqlCommand comm = new SqlCommand(query);
            comm.Connection = rep_connection;
            comm.Parameters.AddWithValue("@ActNumber", ActID);
            rep_connection.Open();
            SqlDataReader reader = comm.ExecuteReader();
            DataSet dt3 = new DataSet("Act");
            DataTable NewTable = new DataTable("Act");
            NewTable.Columns.Add(new DataColumn("name_obor", typeof(string)));
            NewTable.Columns.Add(new DataColumn("model", typeof(string)));
            NewTable.Columns.Add(new DataColumn("inv_num", typeof(string)));
            NewTable.Columns.Add(new DataColumn("ser_num", typeof(string)));
            dt3.Tables.Add(NewTable);
            while (reader.Read())
            {
                DataRow dr = dt3.Tables["Act"].NewRow();               
                dr["name_obor"] = reader["name_obor"].ToString();
                dr["model"] = reader["model"];
                dr["inv_num"] = reader["inv_num"];
                dr["ser_num"] = reader["ser_num"];
                dt3.Tables["Act"].Rows.Add(dr);
                dt3.AcceptChanges();
            }
            reader.Close();
            reader.Dispose();
            dt3.AcceptChanges();
            return dt3.Tables["Act"];
        }
затем

Код: Выделить всё

          ActToUMP report_ump = new ActToUMP();
                    report_ump.Dictionary.Clear();
                    report_ump.RegData(GetTableForReport(Convert.ToInt32(Request.QueryString["id"])));
                    report_ump.Dictionary.Synchronize();      
                    report_ump.Render(false);
                    Stimulsoft.Report.Web.StiReportResponse.ResponseAsWord2007(Page, report_ump);
знаю,что не очень аккуратно.это чтобы влезло.

Re: DataSet

Добавлено: 17 сен 2012, 16:52
banzai17
Ребят,подсобите,пожалуйста. Который час уже маюсь. Может,кто сталкивался?

Re: DataSet

Добавлено: 17 сен 2012, 17:38
Aleksey
Здравствуйте,

Пожалуйста, попробуйте использовать следующий код:

Код: Выделить всё

report_ump.Dictionary.DataSources.Clear();
report_ump.RegData("XMLConnection", GetTableForReport(Convert.ToInt32(Request.QueryString["id"])));
...
Спасибо.