Announcement

Collapse
No announcement yet.

Reporting Services - Auswahl nach Monat und Jahr

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Reporting Services - Auswahl nach Monat und Jahr

    Hallo,

    ich habe eine kleine Tabelle mit ID, Nachname, Vorname, Datum, etc. Jetzt will ich die Reporting Services bemühen und eine Report z. B. über einen Monat auswählen. Die Auswahl des Zeitraums wird über zwei DatePicker auf der Form gesetzt. Das wäre dann "Datum von:" und "Datum bis:"

    Das dazugehörige Dataset hat folgende Query:
    Code:
    SELECT     id, Nachname, Vorname, Fachbereich, Dauer, Datum
    FROM        stat11patienten
    WHERE     (Datum BETWEEN @DatumVon AND @DatumBis)
    Unter den Berichtsparametern habe ich:
    DatumVon --> Datentyp: DateTime --> Mehrwertig
    DatumBis --> Datentyp: DateTime --> Mehrwertig

    In den Tabelleneigenschaften habe ich als Filter:
    =Fields!Datum.Value = =Parameters!DatumVon.Value
    =Fields!Datum.Value = =Parameters!DatumBis.Value

    Der VB-Code in der Form:
    Code:
    Imports Microsoft.Reporting.WinForms
    Public Class Form2
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            'TODO: Diese Codezeile lädt Daten in die Tabelle "statambpatDataSet1.stat11patienten". Sie können sie bei Bedarf verschieben oder entfernen.
            'Me.stat11patientenTableAdapter.Fill(Me.statambpatDataSet1.stat11patienten)
            Me.ReportViewer1.RefreshReport()
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            setParameters()
    
        End Sub
    
        Private Sub setParameters()
    
            Dim prms() As ReportParameter = {New ReportParameter("DatumVon", DateTimePicker1.Text), New ReportParameter("DatumBis", DateTimePicker2.Text)}
            ReportViewer1.LocalReport.SetParameters(prms)
            Me.ReportViewer1.RefreshReport()
    
        End Sub
    End Class
    Wenn ich nun das Programm aufrufe, kriege ich leider nur die Überschriften der Spalten angezeigt.

    Ich denke das liegt daran, das ich das Fill des DataTables auskommentiert habe. Wenn ich die Kommentierung entferne, kriege ich folgende Fehlermeldungen:
    Für den Parameter "DatumBis" von "Public Overridable Overloads Function Fill(dataTable As statambpatDataSet1.stat11patientenDataTable, DatumVon As Date, DatumBis As Date) As Integer" wurde kein Argument angegeben

    Fehlermeldung ebenso für DatumVon.

    Wie komme ich zu einem sauberen Bericht?

    Gruß
    Mull
    Zuletzt editiert von mullfreak; 04.04.2009, 11:33.

  • #2
    Hallo mullfreak,

    fangen wir mal ganz vorne an.
    Kannst Du Dir den Report selbst anzeigen lassen und werden Werte dargestellt; also nicht über das ReportViewer Control sondern über den Berichtsmanager oder BIDS?
    In den Tabelleneigenschaften habe ich als Filter
    Das kannst Du eigentlich weg lassen, die Filterung erfolgt über die Parameter im DataSet.
    ReportViewer1.LocalReport
    LocalReport, also doch kein ServerReport auf dem ReportingServices Server?

    Hast Du mal durch debugged, das Dir u.a. der DateTimePicker.TEXT liefert?
    [highlight=code]?Me.DateTimePicker1.Text
    "Mittwoch, 5. April 2000"

    ?Me.DateTimePicker1.Value
    #4/5/2000 4:20:39 PM#

    ?Me.DateTimePicker1.Value.Date
    #4/5/2000#[/highlight]
    Der Text ist nett zum lesen (nur nicht fürs DataSet), Value gibt Dir ein richtig DateTime, nur mit Uhrzeit. .Value.Date wäre das geeignete.

    Was Du mit dem TableAdapter machen willst, habe ich nicht so ganz verstanden. Die Datenquelle ist eigentlich im Report selbst definiert.

    Mein Mini-Beispiel mit AdventureWorks.SalesOrderHeader als einem ServerReport sieht so aus und funktioniert tadellos; eigentlich nicht viel anders als Deines:
    [highlight=VB] Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim paraDatumVon As New ReportParameter()
    Dim paraDatumBis As New ReportParameter()

    'Parameter-Werte setzen
    paraDatumVon.Name = "DatumVon"
    paraDatumVon.Values.Add(Me.DateTimePicker1.Value.D ate)

    paraDatumBis.Name = "DatumBis"
    paraDatumBis.Values.Add(Me.DateTimePicker2.Value.D ate)

    'Report Parameter setzen
    Dim parameters() As ReportParameter = {paraDatumVon, paraDatumBis}
    Me.ReportViewer1.ServerReport.SetParameters(parame ters)

    'Anzeige aktualisieren
    Me.ReportViewer1.RefreshReport()

    End Sub[/highlight]
    Zuletzt editiert von O. Helper; 05.04.2009, 16:31.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hi,
      nochmals danke für Deine Hilfe.

      Hier meine Antworten:
      Kannst Du Dir den Report selbst anzeigen lassen und werden Werte dargestellt; also nicht über das ReportViewer Control sondern über den Berichtsmanager oder BIDS?
      Was ist der Berichtsmanager, bzw. wo ist der zu finden? Was ist BIDS?

      LocalReport, also doch kein ServerReport auf dem ReportingServices Server?
      Ich entwickle mit VS2008Pro und einem SQL Express 2005 der über Netzwerk in einer Vmware angebunden ist. Der Express ist kein Advanced!!! Was bedeutet ServerReport? Funktioniert meine Anforderung überhaupt mit dem 2005er Express?

      Hier mein neuer Code:
      Code:
      Imports Microsoft.Reporting.WinForms
      
      Public Class Form2
      
          Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              'TODO: Diese Codezeile lädt Daten in die Tabelle "statambpatDataSet.stat11patienten". Sie können sie bei Bedarf verschieben oder entfernen.
              Me.stat11patientenTableAdapter.Fill(Me.statambpatDataSet.stat11patienten)
      
              Me.ReportViewer1.RefreshReport()
          End Sub
      
          Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
              Dim paraDatumVon As New ReportParameter()
      
              Dim paraDatumBis As New ReportParameter()
      
      
      
              'Parameter-Werte setzen
      
              paraDatumVon.Name = "DatumVon"
      
              paraDatumVon.Values.Add(Me.dtpDatumVon.Value.Date)
      
      
      
              paraDatumBis.Name = "DatumBis"
      
              paraDatumBis.Values.Add(Me.dtpDatumBis.Value.Date)
      
      
      
              'Report Parameter setzen
      
              Dim parameters() As ReportParameter = {paraDatumVon, paraDatumBis}
      
              Me.ReportViewer1.LocalReport.SetParameters(parameters)
      
      
      
              'Anzeige aktualisieren
      
              Me.ReportViewer1.RefreshReport()
          End Sub
      End Class
      Wenn ich jetzt "LocalReport" wähle kriege ich diese Fehlermeldung:
      Fehler bei der lokalen Berichtsverarbeitung.

      Wenn "ServerReport" verwende, dann kommt folgender Fehler:
      Die Quelle der Berichtsdefinition wurde nicht angegeben.

      Beim Debuggen bringen immerhin jetzt die DatetimePicks folgenden Wert:
      #3/1/2009#

      Hoffentlich kriegen wir es hin!!!

      Gruß und danke.
      Mull

      Comment


      • #4
        Hi,

        das mit TabelAdapter kann ich erklären:
        'Me.stat11patientenTableAdapter.Fill(Me.statambpat DataSet1.stat11patienten)
        Diese Zeile kommt vom Assi!

        Gruß
        Mull

        Comment


        • #5
          Es gibt die "LocalReports" und die "ServerReports".
          Die ServerReports werden zentral über den "Reporting Services" verwaltet inkl. der DataSources, sie werden dort auch gerendert und an den Client übertragen.
          Der RS bietet einen Berichtsmanager, mit dem man Berechtigungen etc. veralten kann und sich auch die Reports anzeigen lassen.
          Das BIDS ist das "Business Intelligence Development Studio" zum Entwicklen von u.a. Reports; im Prinzip ist es auch nur Visual Studio. Es gibt auch noch den "Report Builder 2.0" zum Entwurf.

          "LocalReport" sind RDLC Dateien, die lokal auf dem Client liegen und dort gerendert werden.

          Wie man die mit dem ReportViewer-Control verwendet, habe ich noch keine Erfahrungen.
          Wenn ich mir die Beispiele wie
          http://msdn.microsoft.com/de-de/libr...ng(VS.80).aspx
          ansehe, muss man noch ein DataSet an das DataSources des LocalReports binden.
          Nur wie, das weiß ich noch nicht.

          Aber sieh Dich auch mal im .NET Forum(http://entwickler-forum.de/forumdisplay.php?f=1) um, da gibt es auch Beispiele zum ReportViewer-Control.
          http://entwickler-forum.de/showthrea...t=reportviewer
          http://entwickler-forum.de/showthrea...t=reportviewer

          Ansonsten ist es momentan schwierig zu sagen, ob es am Report-Design liegt oder am Abruf mit dem Control oder woran es sonst hapert.
          Hast Du es auch schon mal mit einem einfachen Report ohne Parameter versucht, ob der angezeigt werden kann?
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment


          • #6
            Hi O. Helper,

            yep, einen einfachen Report kriege ich hin, z. B. ganz easy mit Select * from tabelle. Dann kriege ich alle Daten im ReportViewer angezeigt. Dazu verwende ich aber den Assistenten. Mit Paramter hat es auch geklappt, z. B. über die Auswahl aus einer Combo-Box mit dem Nachnamen. Nur mit dem Datum kriege ich Stress.

            Also sollte generell, die Konstellation --> VS2008 und SQL2005Express (n. Advanced) klappen, sonst könnte ich ja gar keine Reports anzeigen.

            Ich schaue mir mal Deine Links an. Vielleicht bringen die Licht ins Dunkel.

            Gruß
            Mull

            Comment

            Working...
            X