Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 20.01.17 17:01 
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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Mo 23.01.17 16:54 
Hab dennoch eine weitere Frage.

ausblenden 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:
deadlyembrace.net/mu...rt-parameters-from-c

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


Und so siehts bei mir insgesamt aus:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Di 24.01.17 16:30 
Fehler gefunden. Statt ServerReport, gehörte an einer Stelle "LocalReport" hin.

Nun hab ich ein weiteres Problem:

ausblenden 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