Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 16 odgovora
  • 8.243 pregleda

Najnovija ↓

Subreport C# WinForms - HOW TO? 04.02.2015. u 22:25 · pre 142 meseca #1
Radi se o vozilima i detaljima.
U bazi podataka imam definisane procedure za izbor svih vozila i izbor detalja vozila na osnovu VozilaID.


U reportu prikazujem sva vozila...
Kako da na jednostavan način dodam Subreport, tako da ispod svakog vozila(na osnovu njegovog ID-a) budu ispisani detalji?
Neki "jednostavniji" YouTube video i sl.

Treba izgledati:

Vozilo 1
- detalji vozila 1
Vozilo 2
- detalji vozila 2


Ne mogu da pronađem rješenje, a pokušavao sam nekoliko načina...
Re: Subreport C# WinForms - HOW TO? 04.02.2015. u 22:41 · pre 142 meseca #2
Ako se radi o rdlc, nema "baš prostog" načina da se izvede to što hoćeš preko sub reporta:
https://msdn.microsoft.com/en-...eport.subreportprocessing.aspx

Radio sam to više puta, i ide ovako:
Code:

1. Na DetaljiVozila subreportu napravi jedan parametar koji se zove VoziloID.

2. Na glavnom reportu, tu gde zalepiš subreport, binduj subreportov parametar VoziloID na VoziloID field.

3. U SubreportProcessing event handleru, sa e.Parameters["VoziloID"].Values[0] dobijaš ID vozila.

4. Dalje u event handleru, izvuci podatke preko dobijenog ID-a vozila i daj ih subreportu preko e.DataSources.Add(...).

Sviđa mi se1
Re: Subreport C# WinForms - HOW TO? 04.02.2015. u 23:28 · pre 142 meseca #3
Citat:
dusans: Ako se radi o rdlc, nema "baš prostog" načina da se izvede to što hoćeš preko sub reporta:
https://msdn.microsoft.com/en-...eport.subreportprocessing.aspx

Radio sam to više puta, i ide ovako:
Code:

1. Na DetaljiVozila subreportu napravi jedan parametar koji se zove VoziloID.

2. Na glavnom reportu, tu gde zalepiš subreport, binduj subreportov parametar VoziloID na VoziloID field.

3. U SubreportProcessing event handleru, sa e.Parameters["VoziloID"].Values[0] dobijaš ID vozila.

4. Dalje u event handleru, izvuci podatke preko dobijenog ID-a vozila i daj ih subreportu preko e.DataSources.Add(...).



Pod (3. ) trebao bih da dobijam sljedeći/naredni parametar VoziloID u reportu, tj. za svaki naredni Subreport se učitava novi parametar?
Jesam li dobro razumio?
Re: Subreport C# WinForms - HOW TO? 04.02.2015. u 23:36 · pre 142 meseca
izmenjeno 1 put, poslednji put dusans 04.02.2015. u 23:52
  1. dusans04.02.2015. u 23:52zapis iz teksta poruke
#4
Jeste, baš tako.
Za svaku "instancu" subreporta ce se pozivati SubreportProcessing handler
i u svakom pozivu ce parametar imati drugačiju vrednost.
Ovo normalno pod pretpostavkom da si subreport u main reportu
stavio u listu ili matrix i na taj način ga ponavljaš.

Ima tu još nekih varijanti/alternativa (malo prostijih) ako ne koristiš subreport za detalje,
kao i još jedna varijanta ako subreport prikazuje podatke putem jednog matrixa,
pa ako te interesuje mogu da ti ih ugrubo objasnim.
Re: Subreport C# WinForms - HOW TO? 04.02.2015. u 23:57 · pre 142 meseca #5
Citat:
dusans: Jeste, baš tako.
Za svaku "instancu" subreporta ce se pozivati SubreportProcessing handler
i u svakom pozivu ce parametar imati drugačiju vrednost.
Ovo normalno pod pretpostavkom da si subreport u main reportu
stavio u listu ili matrix i na taj način ga ponavljaš.

Ima tu još nekih varijanti/alternativa (malo prostijih) ako ne koristiš subreport za detalje,
kao i još jedna varijanta ako subreport prikazuje podatke putem jednog matrixa,
pa ako te interesuje mogu da ti ih ugrubo objasnim.

[Ovu poruku je menjao dusans dana 04.02.2015. u 23:52 GMT+1]


Nikada nisam koristio matrix table.
Da li je to kao kada trebamo koristiti "expressions", npr. SUM kolone, reda?

Bilo bi poželjno i grubo objašnjenje, sigurno da će mi pomoći!
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 13:26 · pre 142 meseca #7
Citat:
Dusan Kondic: Ja bih sve podatke pokupio jednim SELECT-om i u Report-u ih grupisao po vozilima.


Na koji način da ih grupišem, tako da izgleda Vozilo gore, a detalji vozila u Subreport?
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 13:36 · pre 142 meseca #8
Napiši šta konkretno imaš u detaljima vozila, da li su neke lista(liste) u pitanju?
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 14:19 · pre 142 meseca
izmenjeno 1 put, poslednji put azzpoz 05.02.2015. u 14:43
  1. azzpoz05.02.2015. u 14:43zapis iz teksta poruke
#9
Citat:
dusans: Napiši šta konkretno imaš u detaljima vozila, da li su neke lista(liste) u pitanju?


U pitanju je više redova, tj. lista detalja.
Za jedno vozilo može biti i do/preko 10 detalja.
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 15:31 · pre 142 meseca #10
Izvor podataka:

SELECT VoziloId, VoziloSifra, VoziloNaziv, Detalj1, Detalj2, Detalj3 ...

U report-u dodati grupisanje po polju VoziloId pa u header-u grupe upisati npr. šifru i naziv vozila a u detalje sve ostale podatke tako da se dobije

Šifra vozila 1 Naziv vozila 1
Detalj 111 Detalj 112 Detalj 113 Detalj 114
Detalj 121 Detalj 122 Detalj 123 Detalj 124
Šifra vozila 2 Naziv vozila 2
Detalj 211 Detalj 212 Detalj 213 Detalj 214
Detalj 221 Detalj 222 Detalj 223 Detalj 224
itd.
Sviđa mi se1
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 15:36 · pre 142 meseca #11
Citat:
Dusan Kondic: Izvor podataka:

SELECT VoziloId, VoziloSifra, VoziloNaziv, Detalj1, Detalj2, Detalj3 ...

U report-u dodati grupisanje po polju VoziloId pa u header-u grupe upisati npr. šifru i naziv vozila a u detalje sve ostale podatke tako da se dobije

Šifra vozila 1 Naziv vozila 1
Detalj 111 Detalj 112 Detalj 113 Detalj 114
Detalj 121 Detalj 122 Detalj 123 Detalj 124
Šifra vozila 2 Naziv vozila 2
Detalj 211 Detalj 212 Detalj 213 Detalj 214
Detalj 221 Detalj 222 Detalj 223 Detalj 224
itd.


Hvala, odlična je ideja.
Sigurno da ću iskoristi i ovo, ali "moram" naučiti i drugi način, tj. Subreport.
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 16:31 · pre 142 meseca #12
Problem mi predstavlja...


Ja u Reportu imam 2 DataSet-a, jedan je Vozilo, a drugi su DetaljiVozila.
Ne znam kako u SubreportProcessingEventHandler proslijedim VoziloId koje sam naveo kao parametar u Subreport-u???
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 16:39 · pre 142 meseca #13
Ovako na primer:
Code:

void MySubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
    var VoziloID = System.Convert.ToInt32(e.Parameters["VoziloID"].Values[0]);
    ....
    e.DataSources.Add(...);
}
Sviđa mi se1
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 18:13 · pre 142 meseca #14
Citat:
dusans: Ovako na primer:
Code:

void MySubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
    var VoziloID = System.Convert.ToInt32(e.Parameters["VoziloID"].Values[0]);
    ....
    e.DataSources.Add(...);
}


Gdje ću pozvati u kodu funkciju/proceduru(u jednu klasi sam postavio funkciju za GetDetaljiVozilaById(VoziloId))?
Re: Subreport C# WinForms - HOW TO? 05.02.2015. u 22:04 · pre 142 meseca #15
Pozvaćeš je u subreport processing event handleru.
Ne čitaš pažljivo, dato je i MSDN primeru i ja sam nekoliko puta pomenuo
totalno je očigledno gde trebaš da učitaš podatke i da ih doturiš subreportu.

Evo ti jedan komplet primer:

Code:

        public void ShowReport()
        {
            // Load and Display Report
            ReportViewerMain.Reset();
            ReportViewerMain.LocalReport.LoadReportDefinition(new MemoryStream(Definitions.MasterReport));
            ReportViewerMain.LocalReport.LoadSubreportDefinition("DetailReport", new MemoryStream(Definitions.DetailReport));
            ReportViewerMain.LocalReport.DataSources.Clear();
            ReportViewerMain.LocalReport.DataSources.Add(new ReportDataSource("Master", MasterData));
            ReportViewerMain.LocalReport.EnableHyperlinks = true;
            ReportViewerMain.LocalReport.SubreportProcessing += SubreportProcessing;
            ReportViewerMain.LocalReport.Refresh();
        }

        private void SubreportProcessing(object sender, SubreportProcessingEventArgs e)
        {
            var MasterID = Convert.ToInt32(e.Parameters["MasterID"].Values[0]);
            // Ovde ucitavas podatke i dajes ih instanci subreporta
            var DetailData = DetailBroker.GetByMaster(MasterID);
            e.DataSources.Add(new ReportDataSource("Detail", DetailData));
        }

Sviđa mi se1
Re: Subreport C# WinForms - HOW TO? 07.02.2015. u 01:52 · pre 142 meseca #16
Citat:
dusans: Pozvaćeš je u subreport processing event handleru.
Ne čitaš pažljivo, dato je i MSDN primeru i ja sam nekoliko puta pomenuo
totalno je očigledno gde trebaš da učitaš podatke i da ih doturiš subreportu.

Evo ti jedan komplet primer:

Code:

        public void ShowReport()
        {
            // Load and Display Report
            ReportViewerMain.Reset();
            ReportViewerMain.LocalReport.LoadReportDefinition(new MemoryStream(Definitions.MasterReport));
            ReportViewerMain.LocalReport.LoadSubreportDefinition("DetailReport", new MemoryStream(Definitions.DetailReport));
            ReportViewerMain.LocalReport.DataSources.Clear();
            ReportViewerMain.LocalReport.DataSources.Add(new ReportDataSource("Master", MasterData));
            ReportViewerMain.LocalReport.EnableHyperlinks = true;
            ReportViewerMain.LocalReport.SubreportProcessing += SubreportProcessing;
            ReportViewerMain.LocalReport.Refresh();
        }

        private void SubreportProcessing(object sender, SubreportProcessingEventArgs e)
        {
            var MasterID = Convert.ToInt32(e.Parameters["MasterID"].Values[0]);
            // Ovde ucitavas podatke i dajes ih instanci subreporta
            var DetailData = DetailBroker.GetByMaster(MasterID);
            e.DataSources.Add(new ReportDataSource("Detail", DetailData));
        }


Ja sam napravio TABLE s podacima iz jednog DataSet-a, a ispod je red sa Subreport-om koji bi trebao da koristi parametar iz prvog DataSeta kako bi se ispunio podacima.
*kada uradim debug, funkcija za SubreportProcessing se ne poziva???
Re: Subreport C# WinForms - HOW TO? 07.02.2015. u 11:30 · pre 142 meseca #17
Dobro si uradio to sa TABLE i stavljanjem subreporta u jedan red.
Pozivanje ne radi ako zaboraviš subscribe na event (što verujem nisi zaboravio - npr. ReportViewerMain.LocalReport.SubreportProcessing += SubreportProcessing; ).
Češći razlog je da nešto nije dobro povezano i onda ni ne dolazi do generisanja subreporta:
http://stackoverflow.com/quest...ortprocessing-event-not-firing
Citat:

Check your subreport parameters. If a parameter condition fails, the subreport is not loaded. Also check Visual Studio trace output, it shows which parameter causes the error.
In order to perform a quick check, set all subreport parameters to allow null.
It did the trick for me (now, I just need to understand why I get a null value instead of the expected one :))

A može i ovo da bude u pitanju:
https://social.msdn.microsoft....-firing?forum=vsreportcontrols

Elem, prvu stvar koju bih proverio jeste parametar.
Na glavnom reportu, desni klik na subreport > Subreport Properties > Jezičak Parameters
Tu mora da bude jedan parametar Name - VoziloId, Value - [VoziloId] (ili kako si već nazvao parametre i kolonu).
Uglavnom, igraj se, probaj kombinacije dok ne proradi.
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme