Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Subreport C# WinForms - HOW TO?

[es] :: .NET :: .NET Desktop razvoj :: Subreport C# WinForms - HOW TO?

[ Pregleda: 5978 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Subreport C# WinForms - HOW TO?04.02.2015. u 21:25 - pre 112 meseci
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...
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?04.02.2015. u 21:41 - pre 112 meseci
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(...).

 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?04.02.2015. u 22:28 - pre 112 meseci
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?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?04.02.2015. u 22:36 - pre 112 meseci
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]
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?04.02.2015. u 22:57 - pre 112 meseci
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!
 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
*.adsl-a-5.sezampro.rs.

Sajt: www.drinacoding.com


+14 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 07:17 - pre 112 meseci
Ja bih sve podatke pokupio jednim SELECT-om i u Report-u ih grupisao po vozilima.
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 12:26 - pre 112 meseci
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?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 12:36 - pre 112 meseci
Napiši šta konkretno imaš u detaljima vozila, da li su neke lista(liste) u pitanju?
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 13:19 - pre 112 meseci
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.


[Ovu poruku je menjao azzpoz dana 05.02.2015. u 14:43 GMT+1]
 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
*.adsl-a-5.sezampro.rs.

Sajt: www.drinacoding.com


+14 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 14:31 - pre 112 meseci
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.
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 14:36 - pre 112 meseci
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.
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 15:31 - pre 112 meseci
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???
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 15:39 - pre 112 meseci
Ovako na primer:
Code:

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

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 17:13 - pre 112 meseci
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))?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?05.02.2015. u 21:04 - pre 112 meseci
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));
        }

 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Subreport C# WinForms - HOW TO?07.02.2015. u 00:52 - pre 111 meseci
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???
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Subreport C# WinForms - HOW TO?07.02.2015. u 10:30 - pre 111 meseci
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.
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Subreport C# WinForms - HOW TO?

[ Pregleda: 5978 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.