Telerik Forums
Reporting Forum
3 answers
566 views

I successfully make an example Winforms App which is taking parameters from user and then exports report which has a subreport to pdf. But I have an problem which I can solve just by putting the subreport's trdp file in the debug folder which is in the project. But I want to put subreport's trdp file where I want to put without getting the error. How can I do that ? I will attach the error I am getting. The error is written in Turkish. But It basically says I couldn't find the file "C:\Users\OE\source\repos\TelerikReportsDenemeForm\TelerikReportsDenemeForm\bin\Debug\denemereportabv.trdp".       

Here is my code : 

001.namespace TelerikReportsDenemeForm
002.{
003.    class ReportConnectionStringManager
004.    {
005.        readonly string connectionString;
006. 
007.        public ReportConnectionStringManager(string connectionString)
008.        {
009.            this.connectionString = connectionString;
010.        }
011. 
012.        public ReportSource UpdateReportSource(ReportSource sourceReportSource)
013.        {
014.            if (sourceReportSource is UriReportSource)
015.            {
016.                var uriReportSource = (UriReportSource)sourceReportSource;
017.                // unpackage TRDP report
018.                // http://docs.telerik.com/reporting/report-packaging-trdp#unpackaging
019.                var reportInstance = UnpackageReport(uriReportSource);
020.                // or deserialize TRDX report(legacy format)
021.                // http://docs.telerik.com/reporting/programmatic-xml-serialization#deserialize-report-definition-from-xml-file
022.                // var reportInstance = DeserializeReport(uriReportSource);
023.                ValidateReportSource(uriReportSource.Uri);
024.                this.SetConnectionString(reportInstance);
025.                return CreateInstanceReportSource(reportInstance, uriReportSource);
026.            }
027. 
028.            if (sourceReportSource is XmlReportSource)
029.            {
030.                var xml = (XmlReportSource)sourceReportSource;
031.                ValidateReportSource(xml.Xml);
032.                var reportInstance = this.DeserializeReport(xml);
033.                this.SetConnectionString(reportInstance);
034.                return CreateInstanceReportSource(reportInstance, xml);
035.            }
036. 
037.            if (sourceReportSource is InstanceReportSource)
038.            {
039.                var instanceReportSource = (InstanceReportSource)sourceReportSource;
040.                this.SetConnectionString((ReportItemBase)instanceReportSource.ReportDocument);
041.                return instanceReportSource;
042.            }
043. 
044.            if (sourceReportSource is TypeReportSource)
045.            {
046.                var typeReportSource = (TypeReportSource)sourceReportSource;
047.                var typeName = typeReportSource.TypeName;
048.                ValidateReportSource(typeName);
049.                var reportType = Type.GetType(typeName);
050.                var reportInstance = (Report)Activator.CreateInstance(reportType);
051.                this.SetConnectionString((ReportItemBase)reportInstance);
052.                return CreateInstanceReportSource(reportInstance, typeReportSource);
053.            }
054. 
055.            throw new NotImplementedException("Handler for the used ReportSource type is not implemented.");
056.        }
057. 
058.        ReportSource CreateInstanceReportSource(IReportDocument report, ReportSource originalReportSource)
059.        {
060.            var instanceReportSource = new InstanceReportSource { ReportDocument = report };
061.            instanceReportSource.Parameters.AddRange(originalReportSource.Parameters);
062.            return instanceReportSource;
063.        }
064. 
065.        void ValidateReportSource(string value)
066.        {
067.            if (value.Trim().StartsWith("="))
068.            {
069.                throw new InvalidOperationException("Expressions for ReportSource are not supported when changing the connection string dynamically");
070.            }
071.        }
072. 
073.        Report UnpackageReport(UriReportSource uriReportSource)
074.        {
075.            var reportPackager = new ReportPackager();
076.            using (var sourceStream = System.IO.File.OpenRead(uriReportSource.Uri))
077.            {
078.                var report = (Report)reportPackager.UnpackageDocument(sourceStream);
079.                return report;
080.            }
081.        }
082. 
083.        Report DeserializeReport(UriReportSource uriReportSource)
084.        {
085.            var settings = new System.Xml.XmlReaderSettings();
086.            settings.IgnoreWhitespace = true;
087.            using (var xmlReader = System.Xml.XmlReader.Create(uriReportSource.Uri, settings))
088.            {
089.                var xmlSerializer = new Telerik.Reporting.XmlSerialization.ReportXmlSerializer();
090.                var report = (Telerik.Reporting.Report)xmlSerializer.Deserialize(xmlReader);
091.                return report;
092.            }
093.        }
094. 
095.        Report DeserializeReport(XmlReportSource xmlReportSource)
096.        {
097.            var settings = new System.Xml.XmlReaderSettings();
098.            settings.IgnoreWhitespace = true;
099.            var textReader = new System.IO.StringReader(xmlReportSource.Xml);
100.            using (var xmlReader = System.Xml.XmlReader.Create(textReader, settings))
101.            {
102.                var xmlSerializer = new Telerik.Reporting.XmlSerialization.ReportXmlSerializer();
103.                var report = (Telerik.Reporting.Report)xmlSerializer.Deserialize(xmlReader);
104.                return report;
105.            }
106.        }
107. 
108.        void SetConnectionString(ReportItemBase reportItemBase)
109.        {
110.            if (reportItemBase.Items.Count < 1)
111.                return;
112. 
113.            if (reportItemBase is Report)
114.            {
115.                var report = (Report)reportItemBase;
116. 
117.                if (report.DataSource is SqlDataSource)
118.                {
119.                    var sqlDataSource = (SqlDataSource)report.DataSource;
120.                    sqlDataSource.ConnectionString = connectionString;
121.                }
122.                foreach (var parameter in report.ReportParameters)
123.                {
124.                    if (parameter.AvailableValues.DataSource is SqlDataSource)
125.                    {
126.                        var sqlDataSource = (SqlDataSource)parameter.AvailableValues.DataSource;
127.                        sqlDataSource.ConnectionString = connectionString;
128.                    }
129.                }
130.            }
131. 
132.            foreach (var item in reportItemBase.Items)
133.            {
134.                //recursively set the connection string to the items from the Items collection
135.                SetConnectionString(item);
136. 
137.                //set the drillthrough report connection strings
138.                var drillThroughAction = item.Action as NavigateToReportAction;
139.                if (null != drillThroughAction)
140.                {
141.                    var updatedReportInstance = this.UpdateReportSource(drillThroughAction.ReportSource);
142.                    drillThroughAction.ReportSource = updatedReportInstance;
143.                }
144. 
145.                if (item is SubReport)
146.                {
147.                    var subReport = (SubReport)item;
148.                    subReport.ReportSource = this.UpdateReportSource(subReport.ReportSource);
149.                    continue;
150.                }
151. 
152.                //Covers all data items(Crosstab, Table, List, Graph, Map and Chart)
153.                if (item is DataItem)
154.                {
155.                    var dataItem = (DataItem)item;
156.                    if (dataItem.DataSource is SqlDataSource)
157.                    {
158.                        var sqlDataSource = (SqlDataSource)dataItem.DataSource;
159.                        sqlDataSource.ConnectionString = connectionString;
160.                        continue;
161.                    }
162.                }
163. 
164.            }
165.        }
166.    }
167. 
168.    public partial class Form1 : Form
169.    {
170.        public Form1()
171.        {
172.            InitializeComponent();
173.        }
174. 
175.        private void BtnExportPDF_Click(object sender, EventArgs e)
176.        {
177.            var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
178. 
179.            // set any deviceInfo settings if necessary
180.            var deviceInfo = new System.Collections.Hashtable();
181. 
182.            // Depending on the report definition choose ONE of the following REPORT SOURCES
183. 
184. 
185.            ////                  -2-
186.            //// ***Declarative (TRDP/TRDX) report definitions***
187.            var reportSource = new Telerik.Reporting.UriReportSource();
188. 
189.            //// reportName is the path to the TRDP/TRDX file
190.            reportSource.Uri = @"C:\Users\OE\Desktop\TelerikReport\Deneme.trdp";
191.            ////                  -2-
192.            ReportConnectionStringManager reportConnection = new ReportConnectionStringManager("Data Source=192.168.6.198:1521/TEST2;User Id=smart;Password=a;");
193.            ReportSource rs = reportConnection.UpdateReportSource(reportSource);
194.             
195. 
196. 
197.            ////                  -3-
198.            //// ***Instance of the report definition***
199.            //var reportSource = new Telerik.Reporting.InstanceReportSource();
200. 
201.            //// Report1 is the class of the report. It should inherit Telerik.Reporting.Report class
202.            //reportSource.ReportDocument = new Report1();
203.            ////                  -3-
204.            object parameterValue = txtBasDep.Text;
205.            rs.Parameters.Add("basdepid", parameterValue);
206.            object parameterValue1 = txtBitDep.Text;
207.            rs.Parameters.Add("bitdepid", parameterValue1);
208.            object parameterValue2 = txtSonDogum.Text;
209.            rs.Parameters.Add("sondogumtar", parameterValue2);
210. 
211.            Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", rs, deviceInfo);
212. 
213. 
214. 
215.            string filePath = @"C:\Users\OE\Desktop\TelerikReport\Deneme.pdf";
216. 
217.            using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
218.            {
219.                fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
220.            }
221. 
222.            MessageBox.Show("The report has been exported!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
223.        }
224.    }
225.}
Silviya
Telerik team
 answered on 18 Sep 2019
1 answer
429 views

Hello.

 

I try to get the last date of the next month in my report.  And it's have to work fine even at the end of the year.  By example, if i print my report in december 2019 i want to display on it Jan, 31 2020.

Any suggestion will be very appreciate.

Have nice day everyone.

 

 

Neli
Telerik team
 answered on 17 Sep 2019
1 answer
264 views

I have a report (trdp) with a zip code field.  some of the data has the zip code saved as 5 digits some have 9 (ie. 12345-4578).  If the data length is 5 I want the report to display 01245 if it's length is > 5 I want to display 01245-7845. 

How would one acomplish this without using a user defined function?

Neli
Telerik team
 answered on 17 Sep 2019
0 answers
121 views

Hello,

i'm new with Telerik report designer. So i want to make a connexion to a MS Access file but window of "Choose an object context" came empty.

Is there any explanation for this case?

Thanks.

Msadek
Top achievements
Rank 1
 asked on 17 Sep 2019
1 answer
187 views

PLEASE VIEW THE ATTACHED SCREEN SHOT.

Setting ReportSource parameter does not set the ReportDocument parameter value.

Why is the parameter value not flowing to the ReportDocument as the docs state it does?

Thank you!

Karl

Silviya
Telerik team
 answered on 17 Sep 2019
3 answers
990 views

I have a TRDP or TRDX that I have resolved at runtime.

These TRDP and TRDX objects don't expose anything except parameters.  Not sure why this is.

How can I set the DataSource at runtime?

(please don't ask why I want to do it, I just need to, thank you)

 

Karl

 

 

 

Silviya
Telerik team
 answered on 17 Sep 2019
2 answers
429 views

telerik report designer : 13.1.19.618

When I use IIF as = IIF(1 > 0, 1, 0/ 1) , it throws exception Attempted to devide by zero. I think it is a bug.

Silviya
Telerik team
 answered on 16 Sep 2019
1 answer
340 views

Does anyone know how to get the value of report parameters in the default report constructor? I am using Telerik.ReportViewer.Html5.WebForms. You used to be able to get it by the example below but this no longer works. Is there another way to get a reference to a parameter within the default constructor?

 

    public partial class Report1 : Telerik.Reporting.Report
    {
        public Report1(int month)
        {
            //
            // Required for telerik Reporting designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //

 

           int MonthParam = month;
        }
    }

Neli
Telerik team
 answered on 16 Sep 2019
1 answer
319 views

when trying to change the page setup (especially page width and height) dynamically according to a specific input .

the page setup works fine when the system is in English (default) , but when changing the language the width and height parameters doesn't bind with the telerik report 
* the report's data is in English 

* Paper Kind : Custom , Width : 80 and Height:100

Silviya
Telerik team
 answered on 16 Sep 2019
2 answers
312 views

I have an issue on my Telerik charts where the data label will be inside of the column if the column reaches the edge of the chart area, as attached.

Is there anyway to force the chart to not reach the edge so this won't occur? I'm assuming it takes the largest value and uses that as the edge of the chart, how do I go about stopping this? I've made sure the DataPointLabelAlignment is set to OutsideEnd, as that would make the most logical sense.

Any help on this would be greatly appreciated - I'm sure it's something small and stupid that I'm missing!

 

Thanks,

 

Phil
Top achievements
Rank 1
 answered on 16 Sep 2019
Top users last month
Boardy
Top achievements
Rank 2
Veteran
Iron
Benjamin
Top achievements
Rank 3
Bronze
Iron
Veteran
ivory
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ClausDC
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?