Search code examples
c#mysqlwpfreportdata-analysis

Create report from dynamically built dataset


I'm having trouble coming up with a way to generate reports (either via xlsx or MS report viewer). The biggest issue is my dataset being dynamically created. Here's what I have:

One or more terminals periodically fill a cloud-hosted database with information about where the info is coming from, the global key and the value corresponding to the pair (origin, key).

So I end up with a table like:

TERMINAL_NO|GLOBAL_KEY|DECIMAL_VALUE
===========|==========|=============
123        |9876      |1.00
123        |9875      |0.50
123        |9872      |-4.00
234        |9876      |3.00
234        |9875      |5.45
234        |9872      |2.50

And I have made an app that transforms that into a DataSet with one column per TERMINAL_NO, and each row is every distinct GLOBAL_KEY, storing the corresponding DECIMAL_VALUES for each pair. However, that's the issue - I can't find a way to generate reports or xlsx files with dynamically created DataSets, as I understood both of them need typed DataSets to work with.

Is there an easier way to gather that data, or am I doing this wrong?

08-15-20 EDIT As per @jdweng, I did try the method depicted there, but I can't make the reportViewer display the actual data. Currently I have the following:

            ReportDataSource rds = new ReportDataSource("DataSetStock", LoadData());
//LoadData() returns a filled datatable.
            RView.ProcessingMode = ProcessingMode.Local;
            RView.LocalReport.DataSources.Clear();
            RView.LocalReport.DataSources.Add(rds);
            RView.LocalReport.ReportPath = "StockReport.rdlc";
            RView.RefreshReport();

Yet, all I get is an empty reportviewer inside the winformshost control.


Solution

  • As per @nbk's suggestion, I went with a report generator code made by Nadir (https://www.codeproject.com/Tips/888174/Dynamically-Creating-an-RDLC-Report-Just-Using-a-D), by using the provided .cs files.

    Just had to make a few changes on the xaml because I'm not using a logo image. I already had my dataset (just had to change the column names to be cls-compliant) and it worked flawlessly. I didn't have to use the userControl folder, as I'm working on WPF and already had a winforms host control with a reportviewer control on it.