MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Visual Studio /.NET > Visual Studio .NET (alle Produkte: C#, VB.NET etc.)
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 04.11.2017, 16:39   #1
bettwurst
Neuer Benutzer
Neuer Benutzer
Standard VB - Mal wieder DataGridView mit filternder Textbox

Liebe VB-Gemeinde,

da ich hier neu bin und „Fremde“ im Internet wie aufm Dorf komisch beliebäugelt werden, stelle ich mich mal kurz vor. Ich bin mittleren Alters, Immobilienverwalter und hatte vor vielen Jahren mal einen bisschen mehr als ein Grundkurs in VB. Nun möchte ich für die Arbeit ein Programm basteln, das mir erst mal folgendes erledigen soll:

Wie schon im Betreff zu lesen, geht es mal wieder um eine DataGridview mit einer filternden Textbox:
- Einlesen einer Excel-Tabelle in ein DataGridview – das habe ich soweit auch schon hinbekommen
- Anzeigen der Tabelle und Autoresize –geht auch
- Filterung der Tabelle mit bis zu zwei Textboxen oder irgendwas, womit es geht
- Filterung nach zuerst nach Namen, wenn das nicht reicht anschließend
- Filterung nach Vertragsnummer und wenn das auch nicht reicht noch

Am Ende sollte bestenfalls nur noch ein Eintrag aus der Tabelle zu sehen sein um die Kreditorennummer abzulesen.
An der Filterung scheitere ich leider. Ich habe schon einiges an Seiten gelesen und alles Mögliche versucht. Daraus kamen z.B. folgende Fehlermeldungen (die erste ist mit dem angefügten Code):
- Syntaxfehler: Fehlender Operand nach dem Operator ''7%''.
- Die Operation 'Like' kann nicht an System.Double und System.String durchgeführt werden.

Versuche ich da zwei Dinge zu verbinden, die man nicht verbinden kann? Ich habs auch schon mit bindingsource versucht, aber das krieg ich irgendwie auch nicht hin. Ich bräuchte mal einen genaueren Tipp, nicht mal die Lösung. Meine VB-Kenntnisse sind alt und löchrig…

Wenn das gelöst ist, poste ich auch gerne den Code nochmal für nachfolgende Generationen. Wobei das nur ein Zwischenziel ist. Glaube aber, dass ich danach alleine weiter komme. Im Übrigen überflüssige Dim's ingnorieren. Die sind aus gescheiterten Versuchen noch übrig. Ich schreibs zur Übung nochmal neu, wenn ich weiß, wie es geht.

Code:

Public Class Form1

    WithEvents bsData As New BindingSource
    Dim DtSet As System.Data.DataTable
    Dim dt As New DataTable
    Dim dv As New DataView

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim MyCommand As System.Data.OleDb.OleDbDataAdapter

        MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ace.OLEDB.12.0;Data Source='d:gfzuzu.xls';Extended Properties=Excel 12.0;")
        MyCommand = New System.Data.OleDb.OleDbDataAdapter("select [Konto], [Beschriftung], [Straße], [Vertragsnummer] from [Sheet1$]", MyConnection)
        MyCommand.TableMappings.Add("Table", "TestTable")
        DtSet = New System.Data.DataTable

        MyCommand.Fill(DtSet)
        dt = DtSet
        DataGridView1.DataSource = DtSet
        DataGridView1.AutoResizeColumns()
        MyConnection.Close()

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        Dim dv_kunde As New DataView
        Dim bs = New BindingSource
        Dim s As String

        dv = New DataView(DtSet)
        s = TextBox1.Text
        dv_kunde = New DataView(DtSet)
        dv_kunde.RowFilter = "Konto '" & TextBox1.Text & "%'"
        DataGridView1.DataSource = dv

    End Sub
End Class
bettwurst ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.11.2017, 23:04   #2
bettwurst
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hm... keinen einzigen lausigen Tipp? :--(

Ich hab mir wirklich zig Videos angeguckt, zig Codes ausm Netz gelesen und versucht richtig zu interpretieren, MSDN-Seiten angeguckt... ich komme einfach nicht drauf.

Möchte damit nur sagen, dass ich mir nur ungern mangelnde Einsatzfreude vorwerfen lassen möchte.

Ich verzweifel langsam...
bettwurst ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.11.2017, 22:14   #3
bettwurst
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Na gut... der Thread mutiert zwar langsam zur Alleinunterhaltung, aber ich gebe die Hoffnung nicht auf. Denn die stirbt bekanntlich zuletzt.

Ich habe nun einen anderen Ansatz probiert und bin damit nun auch schon weiter. Ich hab es hinbekommen, dass meine Tabelle erscheint und diese per Textbox gefiltert wird.

Nun ist mein nächstes Problem, dass ich nach zwei Werten filtern muss. Es funktioniert, wenn ich 1x nach Straßen und 1x nach Nummern filter. Ich würd aber gerne beides zusammen machen.

Könnt ihr mit dazu einen Tipp geben, wie ich den folgenden Code zusammenstelle, damit ich erst nach dem einen Wert und mit der übrigen Tabelle nach dem zweiten Wert suchen kann?

Code:

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        Me.Sheet1BindingSource.Filter = "Straße LIKE '" & TextBox1.Text & "%'"

    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

        Me.BindingSource2.Filter = "Vertragsnummer LIKE '" & TextBox2.Text & "%'"

Geändert von bettwurst (09.11.2017 um 22:16 Uhr).
bettwurst ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.11.2017, 19:26   #4
bettwurst
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Sooo. Meine Anfrage hat sich wohl erledigt.

Mal abgesehen von der kombinierten Zwei-Textboxen-Suche, die ich nicht zwingend benötige, ist mein Programm vorerst fertig. Aber wie das geht finde ich irgendwann bestimmt noch raus. Weitere Funktionen kommen noch, aber die basieren auf dem Wissen, was bereits vorhanden ist.

War 'ne schöne Zeit mit euch!

Geändert von bettwurst (11.11.2017 um 19:29 Uhr).
bettwurst ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.11.2017, 13:54   #5
rms1962
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,

ich würde das an deiner Stelle direkt oben im OleDbcommand filtern. Wenn in den Textboxen nichts steht, werden dann alle Datensätze angezeigt. Dafür würde ich das Laden der Daten in einer separaten Routine unterbringen:

Code:

Imports System.Data.OleDB
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       DatenLaden()
End Sub
Private Sub Text_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox1.TextChanged, Textbox2.TextChanged
        DatenLaden()
End Sub
Privat Sub DatenLaden
        Dim MyConnection As OleDbConnection
        Dim MyCommand As OleDbDataAdapter

        MyConnection = New SOleDbConnection("provider=Microsoft.ace.OLEDB.12.0;Data Source='d:gfzuzu.xls';Extended Properties=Excel 12.0;")
        MyCommand = New OleDbDataAdapter("select [Konto], [Beschriftung], [Straße], [Vertragsnummer] from [Sheet1$] where Straße Like '" & _
Textbox1.text & "%' Vertragsnummer Like '%" & Textbox2.text & "%'", MyConnection)
        Dim da new OleDbDataAdapter(MyCommand)
        Dim dt as new DataTable
        da.Fill(dt)
        DataGridView1.DataSource = dt
End Sub
End Class
Diese Routine rufst du beim Laden des Formulars und beim Ereignis Textbox TextChanged auf. Die BindingSource brauchst du nicht.

Gruß
Ralf
rms1962 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.11.2017, 20:26   #6
Markus Chemnitz
MOF Koryphäe
MOF Koryphäe
Standard

wenn Du einen SQL Server als DBMS dahinter hast schreib ne SQL proc und mach die zur Datenquelle. Geht auch prima mit Parametern. Für alles andere fällt mir auch nichts ein, da ich mich schon vor Jahren von ACCESS und Co. getrennt habe....

__________________

MarkB

Vom Leben nichts zu erwarten, ist das Geheimnis aller echten Heiterkeit!
Markus Chemnitz ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.