none
SQL Select in DataGridView RRS feed

  • Frage

  • Hallo Mitstreiter,

    kurz vorweg, ich bin Anfänger in VB bzw. VisualStudio und nutze dies nur selten für kleine Anwendungen.

    Nun habe ich eine Aufgabenstellung, den Inhalt einer Tabelle einer SQl-Datenbank anzuzeigen. (zyklisch refresh)

    Ich habe bereits ein DataGridView element, das die Daten aus der Tabelle holt.

    "Me.WEBTableAdapter.Fill(Me.HR_DBDataSet.WEB)"

    Nun hätte ich gerne noch Filtermöglichkeiten um nach konkreten Kriterien filtern zu können.

    Die genau SQL-Syntax dazu kenne ich (kann ich im SQL Management Studio ja probieren).

    Kennt jemand eine einfach Möglichkeit diesen Filterwunsch mit diesem DataGridView zu realisieren?

    Oder muss ich ganz anderst herangehen?

    vielen Dank für Eure Hilfe!

    Dienstag, 3. März 2015 10:09

Antworten

  • Hallo Schakal,

    ich nehme mal an, dass Du das DGV mit dem Designer erstellt hast. In dem Fall wurde auch eine "WEBBindingSource" erstellt. Diese hat ein Filter. Du kannst also
    WEBBindingSource.Filter="Mein Filter" abfeuern, wobei "Mein Filter" analog zum SQL-WHERE steht ( ohne"Where")

    Also
    WEBBindingSource.Filter= "Vorname='Meyer' AND PLZ=50000 AND Vorname LIKE 'R*'" [je nach Datenquelle % oder *]

    Ich würde Dir raten den Filter-Macher in eine Funktion auszulagern, wenn Du also Comboboxen hast mit Ländern,Namen, etc.

    Function BuildFilter(Optional sFilter As String = "") as String
            strMultiFilter = String.Empty

            Dim strFormFilter(8) As String
            If Me.cboEinkäufer.Text <> "" Then
                strFormFilter(0) = " AND Buyer LIKE'%" & Trim(cboEinkäufer.Text) & "%'"
            End If

            If Me.cboStatusEK.Text <> "" Then
                strFormFilter(1) = " AND StatusEinkauf='" & cboStatusEK.Text & "'"
            End If

            If Me.cboModell.Text <> "" Then
                strFormFilter(2) = " AND MODELL ='" & Me.cboModell.Text & "'"
            End If

    ..................... und so weiter und so fort........

          For i as Integer = LBound(strFormFilter) To UBound(strFormFilter)
                strMultiFilter = strMultiFilter & strFormFilter(i)
           Next

    'AND und OR wegmachen       

    If Not strMultiFilter = String.Empty Then
                If strMultiFilter.Substring(0, 4) = " AND" Then
                    strMultiFilter = strMultiFilter.Substring(4, strMultiFilter.Length - 4)
                End If
                If strMultiFilter.Length > 3 Then
                    If strMultiFilter.Substring(0, 3) = " OR" Then
                        strMultiFilter = strMultiFilter.Substring(3, strMultiFilter.Length - 3)
                    End If
                End If
            End If

    Return strMultiFilter

    End Function

    Das BuildFilter-ereignis habe ich in den Clicks/SelectedIndexChange Ereignissen meiner Filter auf dem Form

    Und dann gibts halt einen Button der den Filter setzt.

    strMultiFilter ist Formweit deklariert

    Ich hoffe es hilft fürn Anfang

    Gruß

    Raimo


    Dienstag, 3. März 2015 11:15

Alle Antworten

  • Hallo Schakal,

    ich nehme mal an, dass Du das DGV mit dem Designer erstellt hast. In dem Fall wurde auch eine "WEBBindingSource" erstellt. Diese hat ein Filter. Du kannst also
    WEBBindingSource.Filter="Mein Filter" abfeuern, wobei "Mein Filter" analog zum SQL-WHERE steht ( ohne"Where")

    Also
    WEBBindingSource.Filter= "Vorname='Meyer' AND PLZ=50000 AND Vorname LIKE 'R*'" [je nach Datenquelle % oder *]

    Ich würde Dir raten den Filter-Macher in eine Funktion auszulagern, wenn Du also Comboboxen hast mit Ländern,Namen, etc.

    Function BuildFilter(Optional sFilter As String = "") as String
            strMultiFilter = String.Empty

            Dim strFormFilter(8) As String
            If Me.cboEinkäufer.Text <> "" Then
                strFormFilter(0) = " AND Buyer LIKE'%" & Trim(cboEinkäufer.Text) & "%'"
            End If

            If Me.cboStatusEK.Text <> "" Then
                strFormFilter(1) = " AND StatusEinkauf='" & cboStatusEK.Text & "'"
            End If

            If Me.cboModell.Text <> "" Then
                strFormFilter(2) = " AND MODELL ='" & Me.cboModell.Text & "'"
            End If

    ..................... und so weiter und so fort........

          For i as Integer = LBound(strFormFilter) To UBound(strFormFilter)
                strMultiFilter = strMultiFilter & strFormFilter(i)
           Next

    'AND und OR wegmachen       

    If Not strMultiFilter = String.Empty Then
                If strMultiFilter.Substring(0, 4) = " AND" Then
                    strMultiFilter = strMultiFilter.Substring(4, strMultiFilter.Length - 4)
                End If
                If strMultiFilter.Length > 3 Then
                    If strMultiFilter.Substring(0, 3) = " OR" Then
                        strMultiFilter = strMultiFilter.Substring(3, strMultiFilter.Length - 3)
                    End If
                End If
            End If

    Return strMultiFilter

    End Function

    Das BuildFilter-ereignis habe ich in den Clicks/SelectedIndexChange Ereignissen meiner Filter auf dem Form

    Und dann gibts halt einen Button der den Filter setzt.

    strMultiFilter ist Formweit deklariert

    Ich hoffe es hilft fürn Anfang

    Gruß

    Raimo


    Dienstag, 3. März 2015 11:15
  • das hört sich richtig gut an, ich probiere gleich mal...

    Dienstag, 3. März 2015 11:20
  • Hallo Reimo,

    also: besten dank! funktioniert "wie Sau".

    Da Du offensichtlich Experte bist, gleich noch ne Frage:

    Wie kann ich meine Ergebnisse (Sagen wir Messwerte in einer Spalte, dieser Tabelle) grafsich darstellen

    (z.b. in einem Chart) ??

    Dienstag, 3. März 2015 12:25
  • Danke Schakal,

    bitte markiere meine Antwort dann als hilfreich.

    Zur anderen Frage: Stelle diese bitte neu, da sie mit der ursprünglichen sehr wenig zu tun hat.

    Schau aber mal bitte nach dem .net chart control. Mit dem kannst Du die Graphen entweder direkt an Dein SQL-Statement binden oder aber über das DataSet, dass Du ja schon benutzt.

    Gruß

    Raimo


    Dienstag, 3. März 2015 15:57