Entwickler-Ecke

Basistechnologien - ListViewItems in ReportViewer


lapadula - Fr 20.01.17 17:01
Titel: ListViewItems in ReportViewer
Hallo, ich möchte gerne alle ListViewItems in einen ReportViewer tun.

Ich habe bereits eine Klasse Kunden mit getter und setter (KundenNr, Name,usw..)

Dazu eine Form namens Kundenbericht, wo der ReportViewer ist. Die Datenquelle ist die Klasse Kunde.

Dem Konstruktor der Form "Kundenbericht" übergebe ich die beiden Arrays, siehe hier:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 private void PrintKundenbericht()
        {
            Kunde[] ArrKunde = new Kunde[1];
            ArrKunde[0] = oKunde;

            if (!thisFormIsOpen(typeof(FormPrintCustomer), false))
            {
                this.Cursor = Cursors.WaitCursor;
                FormPrintCustomer form = new FormPrintCustomer(ArrKunde);
                form.Show();
                this.Cursor = Cursors.Default;
            }
        }


Und dort dann folgendes:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 
public partial class FormPrintCustomer : Form {
        Kunde[] k;

        public FormPrintCustomer(Kunde[] kunde) {
            InitializeComponent();
            k = kunde;
        }

        private void FormPrintCustomer_Load(object sender, EventArgs e) {
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Classes_Kunde", k));
            this.reportViewer1.RefreshReport();
        }

    }


Nun habe ich eine ListView mit Items die ich auch auf dem Report haben möchte. Wie kann ich das anstellen? Der ReportDataSource erwartet doch immer ein Array oder? kann ich die ListViewItems in ein Array legen und diesen dann übergeben?


Ralf Jansen - Fr 20.01.17 17:20

Zitat:
Dem Konstruktor der Form "Kundenbericht" übergebe ich die beiden Arrays, siehe hier:


Ich sehe da keine Form Kundenbericht und auch nicht das da 2 Arrays beteiligt wären.

Zitat:
Nun habe ich eine ListView mit Items die ich auch auf dem Report haben möchte. Wie kann ich das anstellen?


Ein ListViewItem ist ein reines Vehikel für die UI aber nicht geeignet zur Datenhaltung (das sind UI spezifische Dinge nie). Wenn du Daten transportieren willst brauchst du eine simple Klasse (wie die Kunde Klasse). Die kannst du dann benutzen um die Daten zum ListView oder zum Beispiel zu deinem Report zu transportieren.


lapadula - Mo 23.01.17 15:39

Ich sollte kurz vorm Wochenende keine Fragen mehr stellen... :D

Sorry stand auf dem Schlauch. Hab eine Kunden-Klasse die per SQL-Abfragen "gefüllt" wird. Daraus nehme ich meine Daten


lapadula - Mo 23.01.17 16:54

Hab dennoch eine weitere Frage.


C#-Quelltext
1:
2:
ReportParameter paramSuchwort = new ReportParameter("paramSuchwort", sw.ToArray());
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { paramSuchwort });


Ich habe ein Parameter. Dieser Parameter enthält aber bis zu 8 strings.

Mit: "=Parameters!paramSuchwort.Value" kann ich aber nur einen Parameter in der Tabelle anzeigen lassen.

Wie kann ich alle anzeigen. =Fields!Suchbegriff.Value Funktioniert bei Objekten, nicht aber bei Parametern.

Ich bin auf diese Seite gestoßen und den dortigen Code umgesetzt. Leider erscheint bei mir eine MissingReportSourceException an der stelle:
http://deadlyembrace.net/multivalue-ssrs-report-parameters-from-c


C#-Quelltext
1:
reportViewer1.ServerReport.SetParameters(reportParameters.ToArray());                    


Und so siehts bei mir insgesamt aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string[] test = sw.ToArray();
            List<ReportParameter> reportParameters = new List<ReportParameter>();

ReportParameter multiValueParam = new ReportParameter("paramSuchwort");
            multiValueParam.Values.AddRange(test);
            reportParameters.Add(multiValueParam);
            reportViewer1.ServerReport.SetParameters(reportParameters.ToArray());


lapadula - Di 24.01.17 16:30

Fehler gefunden. Statt ServerReport, gehörte an einer Stelle "LocalReport" hin.

Nun hab ich ein weiteres Problem:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string[] values = sw.ToArray();
            //this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource());
            List<ReportParameter> rptParams = new List<ReportParameter>();
            ReportParameter param = new ReportParameter("paramSuchwort");
            param.Values.AddRange(values);
            rptParams.Add(param);
            this.reportViewer1.LocalReport.SetParameters(rptParams);


sw ist meine Liste mit Strings.

Auf dem Report habe ich eine Tabelle wenn ich dort in die Textbox: = join(Parameters!paramSuchwort.Value,",") eintrage, dann gibt es das auf dem Report in der Textbox zwar das aus was ich haben will
aber er legt automatisch weitere Zeilen an, wo dann genau der selbe Inhalt drinsteht.

Was ich möchte ist aber so:

string[] beispiel {eins, zwei, drei}

die soll in der tabelle dann untereinander stehen

eins
zwei
drei

was er macht ist:

eins, zwei, drei
eins, zwei, drei
eins, zwei, drei