Announcement

Collapse
No announcement yet.

Datensatz Filtern

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

  • Datensatz Filtern

    Hallo Forum,
    ich verwende eine Accessdatenbank im Visual-Studio 2005.
    Dort habe ich eine Tabelle ID,Name, Vorname, Wohnort usw.
    Jetzt möchte ich über den ReportViewer den aktuellen Datensatz ausdrucken.
    Ich habe das mit versucht mit einer TableAdapter Abfrage zu lösen:
    Where ID=ID.
    Wenn ich das Programm Debugge und den Bericht aufrufe, werden mir aber immer alle Datensätze angezeigt.
    Wie kann ich die Datensätze filtern, das immer nur der aktuelle Datensatz zum drucken angezeigt wird?

    MfG
    Schluppe

  • #2
    Hallo Schluppe,

    definiere für den Report die ID Deines aktuellen Datensatzes als Parameter (Menü "Bericht"->"Berichtsparameter...").
    Dann bekommst Du immer nur den eindeutigen (ID) Satz im Bericht angezeigt.
    In der VS Hilfe ist die Vorgehensweise genau beschrieben.

    Manfred

    Comment


    • #3
      Originally posted by elundma View Post
      Hallo Schluppe,

      definiere für den Report die ID Deines aktuellen Datensatzes als Parameter (Menü "Bericht"->"Berichtsparameter...").
      Dann bekommst Du immer nur den eindeutigen (ID) Satz im Bericht angezeigt.
      In der VS Hilfe ist die Vorgehensweise genau beschrieben.

      Manfred
      Hallo Manfred
      Danke für die schnelle Antwort!

      Ich habe die Hilfe durchsucht, aber keinen Hinweis auf einen lokalen Bericht gefunden. Das erstellen war aber auch kein Problem. (Denke ich)
      Name: Report_Parameter_0
      Datentyp: String
      Eingabeaufforderung: Report_Parameter_0

      Bezeichnung Wert
      Verfügbare Werte:
      Fields!ID_Stamm.Value = Fields!ID_Stamm.Value
      Von Hand eingegeben, da mir bei der Auswahl keine Felder angezeigt werden.

      Unter Datasets werden nur die Felder mit (Sum usw.) angezeigt.

      Jetzt bekomme ich beim Debuggen die Fehlermeldung:
      Fehler 1 Ein Value-Ausdruck, der für den Report_Parameter_0-Berichtsparameter verwendet wird, verweist auf ein Feld. Felder können in Berichtsparameterausdrücken nicht verwendet werden.

      MfG
      Schluppe

      Comment


      • #4
        Hallo Schluppe,

        geh doch mal folgedermaßen vor:
        1) Gib Deinem Parameter in der Berichtsparameteransicht einen beliebigen Namen (z.B.: "FilterID" oder so..). Der Name dient nur zur Identifikation. Die Werte in "Datentyp" und "Eingabeaufforderung" so lassen, wie sie sind
        2) In den Berichtseigenschaften unter dem Reiter "Filter" in der Spalte "Ausdruck" das ID-Feld des Berichts aussuchen ("Fields!ID_Stamm.Value")
        3) in der Spalte "Operator" den Vergleichstyp wählen (wahrscheinlich "=")
        4) In der Spalte "Wert" den PullDownButton drücken und "<Ausdruck>" anklicken
        5) Wenn Du jetzt im unteren linken Auswahlfeld "Parameter" wählst, bekommst Du den unter 1) angelegten Parameter angezeigt.

        Der Rest ist dann kein Problem mehr.

        Schönes Wochenende noch.

        Manfred

        Comment


        • #5
          Originally posted by elundma View Post
          Hallo Schluppe,

          geh doch mal folgedermaßen vor:
          1) Gib Deinem Parameter in der Berichtsparameteransicht einen beliebigen Namen (z.B.: "FilterID" oder so..). Der Name dient nur zur Identifikation. Die Werte in "Datentyp" und "Eingabeaufforderung" so lassen, wie sie sind
          2) In den Berichtseigenschaften unter dem Reiter "Filter" in der Spalte "Ausdruck" das ID-Feld des Berichts aussuchen ("Fields!ID_Stamm.Value")
          3) in der Spalte "Operator" den Vergleichstyp wählen (wahrscheinlich "=")
          4) In der Spalte "Wert" den PullDownButton drücken und "<Ausdruck>" anklicken
          5) Wenn Du jetzt im unteren linken Auswahlfeld "Parameter" wählst, bekommst Du den unter 1) angelegten Parameter angezeigt.

          Der Rest ist dann kein Problem mehr.

          Schönes Wochenende noch.

          Manfred
          Hallo Manfred,
          nochmals Danke für die schnellen Antworten.
          Vielleicht habe ich ja mittlerweile ein Brett vorm Kopf, oder sehe den Wald vor lauter Bäumen nicht. Aber ich finde in den Eigenschaften keinen Reiter Filter.
          Ich habe einmal ein Screenshot von der bisherigen Parametereinstellungen gemacht und auch die Eigenschaften (Menü-Bericht-Eigenschaften) angehängt.

          Danke
          Schluppe
          Attached Files

          Comment


          • #6
            Hallo Schluppe,

            die Report Features vom VS sind wirklich ein Kapitel für sich und meines Erachtens zwar funktionell 1a, jedoch aufgrund der Komplexität nicht mehr intuitiv begreifbar.
            Ich habe Dir daher ebenfalls ein paar Screenshots beigefügt (von einem alten Report von mir). Da kannst Du exemplarisch ersehen, wie Du zum Reiter "Filter" kommst (von rechts nach Links zur Mitte!). Der Pfeil im ersten (rechten) Screenshot deutet auf den linken oberen Rand der aus der Toolbox auf den Report gezogenen "Tabelle", die die Felder aus der zugrundeliegenden Abfrage beherbergt. Den musst Du mit der rechten Maustaste anklicken und in dem Context Menü "Eigenschaften" wählen ( also nicht die Eigenschaften des Reports, sondern die Eigenschaften der "Tabelle"). Dann bekommst Du den zweiten ( linken) Dialog angezeigt, in dem sich der Reiter "Filter" befindet. Wenn Du den anwählst, erscheint der nächste Dialog (mittlerer Screenshot), in dem Du die entsprechenden Daten setzen kannst.
            Falls Du diese "Tabelle" der Report-Toolbox nicht benutzt ( so eine Art DatagridView für Reports), kann ich Dir leider nicht sagen, wie Du sonst einen Filter setzen kannst. Aber es ist ja kein Nachteil diese "Tabelle" zu benutzen (im Gegenteil) und kein großer Aufwand sie nachträglich zu implementieren.

            Viel Glück!

            M
            Attached Files

            Comment


            • #7
              Hallo Manfred,
              super langsam geht es voran. Ich glaube, wenn ich diesen einen Fehler (siehe Anhang) noch wegbekomme habe ich es geschafft.
              Die Filtereinstellung in meiner Liste habe ich so gemacht:
              =Fields!ID_Stamm.value = =Parameters!FilterID.Value
              Wenn ich den Bericht aufrufe zeigt der ReportViewer aber anhängende Fehlermeldung.

              Viele Grüße
              Schluppe
              Attached Files

              Comment


              • #8
                Hallo Schluppe,

                sorry, habe natürlich vergessen, dass man den Parameter ja erst noch setzen und an den Report übergeben muß!
                Das geht so:
                1) Parameter definieren und einen Wert zuweisen:
                Dim pmrs() As ReportParameter = {New ReportParameter("FilterID", DeinParameterWert)}

                2) Parameter dem ReportViewer übergeben:
                Me.ReportViewerMeinReport.LocalReport.SetParameter s(pmrs)

                3) Den Report refreshen:
                Me.ReportViewerMeinReport.RefreshReport()

                Diese Übergabe machst Du am besten ereignisorientiert in einer Sub, oder beim Laden der Form.

                Jetzt müsste es aber gehen.

                Viel Glück!!

                M

                Comment


                • #9
                  Hallo Manfred,
                  ich glaube wir nähern uns dem Ende. Ich habe das jetzt so gemacht:
                  Public Class frmStammdatenber

                  Private Sub frmStammdatenber_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                  Dim pmrs() As Microsoft.Reporting.WinForms.ReportParameter = {New Microsoft.Reporting.WinForms.ReportParameter("Filt erID", ID_Stamm)}
                  Aber ID_Stamm wird unterstrichen "Der Name'ID_Stamm' wurde nicht deklariert". Ausserdem musste ich "ReportParameter " in Microsoft.Reporting.WinForms.ReportParameter" umbenennen.

                  MfG
                  Schluppe

                  Comment


                  • #10
                    Hallo Schluppe,

                    sieht doch gut aus.
                    Die Umbenennung in "Microsoft.Reporting.WinForms.ReportParameter" kommt daher, dass Du keinen Verweis auf die "Microsoft.Reporting" hast und daher der absolute Pfad notwendig ist. Ist aber kein gravierender Nachteil.
                    Die Fehlermeldung "Der Name'ID_Stamm' wurde nicht deklariert" kommt daher, dass Deine Sub diese Variable/Zelle nicht kennt, da sie wohl private bzw. nicht deklariert ist/nicht übergeben wird.
                    Gib doch mal zum Testen Deiner Sub eine Dir bekannte ID an Stelle der Variablen "ID_Stamm" in der Deklaration des ReportParameters an. Z.B.:
                    Dim pmrs() As Microsoft.Reporting.WinForms.ReportParameter = {New Microsoft.Reporting.WinForms.ReportParameter("Filt erID", 34)}
                    Wenn dann nur dieser Datensatz (mit der ID 34) im Report erscheint, funktioniert zumindest die Zuweisung an den ReportViewer bzw. dessen Filter.

                    Da Du ja eine Form mit den Daten Deiner Access Tabelle hast, würde ich auf diese Form ein Button installieren (Text: "Drucken") und ihm folgendes Click-Ereignis hinterlegen:

                    sub blablaabla....
                    Dim Dr as DatarowView = Me.MeineTabelleBindingsource.Current
                    Dim Id as Integer = Dr.Item("ID")
                    Dim pmrs() As Microsoft.Reporting.WinForms.ReportParameter = {New
                    Microsoft.Reporting.WinForms.ReportParameter("Filt erID", Id)}
                    Me.ReportViewerMeinReport.RefreshReport()
                    End Sub

                    Die Load-Sub brauchst Du dann nicht mehr!
                    Mit "ID" ist der Name/Item der Zelle gemeint, die die ID des Datensatz beinhaltet.
                    Mit "MeineTabelleBindingSource" ist der Name der Bindingsource für die Tabelle gemeint.
                    Die Sub holt die ID aus dem aktuellen Datensatz der Tabelle, übergibt diese als Parameter dem Report und macht ein Refresh um diesen Datensatz anzuzeigen.

                    Ich glaube, jetz haben wir's !!

                    M

                    Comment


                    • #11
                      Hallo Manfred,
                      ich habe jetzt den Filter ("FilterID", 2)} gesetzt.
                      Jetzt schreibt mir der ReportViewer:
                      FilterExpression-Eigenschaft für das List-Objekt kann nicht verarbeitet werden. Daten vom Tyü'System.Int32 und 'System.String' können nicht verglichen werden. Das mit dem Button werden ich mal versuchen.

                      MfG
                      Schluppe

                      Comment


                      • #12
                        Ich habe den Filter jetzt anders gesetzt. Auf die Personalnummer und den Parameter, und siehe an er funktioniert. Nur wie bekomme ich immer den aktuellen Datensatz zum Ausdruck?

                        MfG
                        Schluppe

                        Comment


                        • #13
                          Nur wie bekomme ich immer den aktuellen Datensatz zum Ausdruck?

                          MfG
                          Schluppe[/QUOTE]

                          in dem Du die von mir vorgeschlagene Sub einbaust.

                          Comment


                          • #14
                            Originally posted by elundma View Post
                            Nur wie bekomme ich immer den aktuellen Datensatz zum Ausdruck?

                            MfG
                            Schluppe
                            in dem Du die von mir vorgeschlagene Sub einbaust.[/QUOTE]

                            Habe ich ja gemacht (in das Eingabeformular), nur er druckt nicht!
                            Sub Drucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
                            Dim Dr As DataRowView = Me.StammdatenBindingSource.Current
                            Dim Id As Integer = Dr.Item("ID_Stamm")
                            Dim pmrs() As Microsoft.Reporting.WinForms.ReportParameter = {New Microsoft.Reporting.WinForms.ReportParameter("Filt erID", Id)}
                            Me.ReportViewer1.RefreshReport()
                            End Sub

                            Comment


                            • #15
                              schau mal in Deiner Mail nach.

                              M

                              Comment

                              Working...
                              X