bindingsource.filter Zahl aus String extrahieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Yeph.

    bindingsource.filter Zahl aus String extrahieren

    Hallo,

    Ich habe eine Spalte im Datagridview mit Barcodes. Die Spalte enthält einen String bestehend aus Text einem Minus und einer laufenden Nummer: wie z.B.:

    MeinBarCode-0999
    MeinBarCode-1000
    usw.....

    Ich will nun alle Einträge von BarCode 1000 bis 2500 z.B. selektieren. Dazu habe ich 2 Möglichkeiten die funzen:

    !) bindingsource.filter ist schnell aber versagt ab 700 Barcodes (Stackoverflow) (Trotzdem Dank ans vb-paradise)

    VB.NET-Quellcode

    1. string = "([BarCode] LIKE '%" & Xstring & "%')" & "Or"'usw.....

    2) das ganze Grid wird durchforstet Zeile um Zeile ist langsam aber unbegrenzt

    VB.NET-Quellcode

    1. CodeBAR = MeinDataGridView.Rows(i).Cells(6).Value.ToString
    2. If CodeBAR Like "*" & CodeBarCount.ToString & "*" Then
    3. MeinDataGridView.Rows(i).Selected = True

    'usw.....

    3) Ich lasse den Textteil des Barcodes weg und arbeite nur mit dem Zahlstring des BarCodes.

    MeinBarCode-0999
    MeinBarCode-1000

    wir gespeichert als

    999
    1000

    dann funktioniert folgende Formel:

    VB.NET-Quellcode

    1. MeinBindingSource.Filter = String.Format("[BarCode] >={0} and [BarCode] <={1}", VonZahl, BisZahl)

    4) Nun möchte ich aber lieber die echten Barecodes im Datagrid und der Datenbank behalten

    Meine Frage:

    Gibt es eine Möglichkeit die dritte Lösung zu benutzen, und die BareCodes im bindingsource.filter in Zahlen umwandeln wie z.B mit einer dieser Formeln:

    VB.NET-Quellcode

    1. xxxx = String.Join(Nothing, System.Text.RegularExpressions.Regex.Split(InputString, "[^\d]"))
    2. xxxxy = Integer.Parse(System.Text.RegularExpressions.Regex.Replace(InputString, "[^\d]", ""))


    Vielen Dank im Voraus

    Yeph
    ich bin überascht vom StackOverFlow. Kann das sein, dass du bei 700 gesuchten Einträgen einen Filterstring mit 700 Teil-Vergleichen zusammensetzt? Das wäre allerdings bisserl pervers.

    Jdfs. käme der Barcode-Teil zuerst, und dann erst der Text, dann würden sich die Barcodes richtig sortieren, und man könnte einen einfachen von - bis - Filter frickeln.

    ErfinderDesRades schrieb:

    Kann das sein, dass du bei 700 gesuchten Einträgen einen Filterstring mit 700 Teil-Vergleichen zusammensetzt? Das wäre allerdings bisserl pervers.

    Jdfs. käme der Barcode-Teil zuerst, und dann erst der Text, dann würden sich die Barcodes richtig sortieren, und man könnte einen einfachen von - bis - Filter frickeln.
    Nun ja, wahrscheinlich bin ich pervers :P

    Ich hatte zuerst gelesen man sollte die Kolonne mit einem Filter durchsuchen und mit dem Zeilenindex auswählen. Das wat ja ziemlich einfach aber eben langsam. Dann dachte ich, dass ein bindingsource.Filter schneller ist.

    Das habe ich dann letztes Wochenende versucht und mit Ihrer Hilfe auch geschafft. Nochmals Vielen Dank dafür. :) Der setzt sich aus den einzelnen Nummern zusammen mit einem Loop.

    Für jeden Barcode gibt es ungefähr 5 bis 30 Einträge. Anfangs hatte ich noch die Messagebox für den Filter im Code und musste jedesmal schmunzeln wenn das Resultat angezeigt wurde (ein Teil davon).

    Dann hatte ich die Idee eine separate Spalte nur für den Zahl-teil des Barcode-Strings zu erstellen. Ich dachte aber dass das genauso langsam wäre.

    Ich kann auch den Textteil ganz weg lassen und diesen nur hinzufügen, wenn er gebraucht wird. Es ist immer derselbe Text. Dafür habe ich einen Button eingefügt um den Text-teil in die Tabelle einzufügen und beim nächsten Klick wieder zu löschen. Ab dem Zeitpunkt wo der Textteil dranhängt würde der Zahlenfilter "von bis" aber leider nicht mehr funktionieren.

    Die Regex-methode die Zahl zu extrahieren bekam ich nicht in den Filter hinein. Ich habe ein Zahlenfeld das ich mit einem LIKE-opreator durchsuche indem ich die Zahl zum String konvertiere. Die CONVERT-formel scheint nur im bindingsource.Filter zu funktionieren. Die Regex-formel nur ausserhalb???

    Gibt es keine "CONVERT"-formel um den ganzen String in eine Zahl umzuwandeln im Filter? Ich glaube ich könnte damit leben, dass nicht der ganze Barcode in der Tabelle angezeigt wird. Es ist aber nicht der korrekte Barcode.

    Vielen Dank für die schnelle Antwort, die nette Hilfe und ich wünsch Ihnen einen angenehmen Tag,

    Yeph
    @ErfinderDesRades

    Vielen Dank für den Tipp. Ich versuche einmal ob das möglich ist. Ansonsten ginge es auch mit dem Trick nur die Zahl in der Datenbank zu speichern. Und sollte einmal der ganze Barcode gefragt sein z.B. um die Daten zu exportieren, muss man nur den Button anklicken.

    Und ich möchte noch einmal die freundlichen Helfer hier loben. Ich habe schon einiges erlebt in Internetforen und hier ist es überaus angenehm "dumme" Fragen zu stellen. Nur durch Fallen lernt man gehen,

    Noch weiterhin ein schönes Wochenende und bitte weiter so,


    Yeph