vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Spalte durchsuchen 
Autor: Manfred X
Datum: 04.09.16 23:37

Hallo!

Unter der Voraussetzung, daß die Spalte SP_2 einen numerischen Datentyp
besitzt, kann man eventuell einen Bindingsource-Filter für die Bearbeitung
der Datensätze verwenden.
Public Class frmFilter
 
 
    Dim dt As New DataTable
    Dim bs As New BindingSource
    Dim dgv As New DataGridView With {.Parent = Me}
 
 
    Private Sub frmFilter_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        'Testspalten und Testdaten
 
        dt.Columns.Add("SP_0")
        dt.Columns.Add("SP_1", GetType(Integer))
        dt.Columns.Add("Kato")
 
        dt.Rows.Add({"xxx", 1000, "a"})
        dt.Rows.Add({"test", 1000, "b"})
        dt.Rows.Add({"test", 2210, "c"})
        dt.Rows.Add({"xxx", 2210, "d"})
        dt.Rows.Add({"test", 2280, "e"})
        dt.Rows.Add({"test", 2480, "f"})
 
        bs.DataSource = dt
 
        'Datensatz-Filter setzen
        bs.Filter = "SP_0 = 'test' AND SP_1 >= 2200 AND SP_1 <= 2300"
 
        'Gefilterte Datensätze bearbeiten
        For i As Integer = 0 To bs.Count - 1
            Dim r As DataRow = DirectCast(bs(i), DataRowView).Row
            r("Kato") = "selected"
        Next i
 
        'Filter entfernen
        bs.Filter = ""
 
        dgv.DataSource = bs
    End Sub
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Spalte durchsuchen 
Autor: Vegas85
Datum: 04.09.16 21:19

Hallo

Ich habe da ein kleines Problem wo ich leider grade nicht weiter komme.

Folgendes ich durchsuche eine Spalte z.b die SP_0 nach einem bestimmten Wort.
Wurde dieses Wort gefunden möchte ich in eine anderen Spalte z.b SP_2 durchsuchen,
alle Werte zwischen 2200 und 2300 sollen dann einen bestimmten Text bekommen.


Hier dazu mal mein Code

 '1.Schritt: den Wert in der Zelle als String lesen
 
                    Dim val1 As String = row("SP_0").ToString
                    Dim val2 As String = row("SP_2").ToString
 
                    '1a.) 
                    val1 = val1.Replace("."c, ",")
                    val2 = val2.Replace("."c, ",")
 
                    '2.Schritt: eine Dezimalzahl-Variable erstellen
                    Dim dec1 As Decimal
                    Dim dec2 As Decimal
 
                    '3.Schritt: Versuch, den String in die Dezimalvariable als 
                    ' Zahl einzutragen
                    If Decimal.TryParse(val1, dec1) Then
 
                        '4. Schritt: Bedingung prüfen in SP_0 nach dem Wert 
                        ' suchen.
                        If dec1 = "test" Then
 
                            '5.Schritt In SP_2 alle nummer zwischen 2200  und 
                            ' 2300 bekommen in Kato einen neuen Wert
 
                            If Decimal.TryParse(val2, dec2) Then
                                If dec2 >= 2200 And dec2 <= 2300 Then
                                    orow("Kato") = "teeeeest2016" 'Zuweisung 
                                    ' des gew. Wertes als String
                                End If
                            Else
                                orow("Kato") = "" 'Leerstring oder 
                                ' Missing-Kennung zuweisen
                            End If
                        End If
                    Else
                        orow("Kato") = "" 'Leerstring oder Missing-Kennung 
                        ' zuweisen
                    End If
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 05.09.16 01:04

Hatte vergessen zu sagen das mein Code auf diesen hier aufgebaut ist.

CSV-Editor

Ja die Spalte SP_2 ist ein numerischen Datentyp,

Also hier mal mein Code.

Gibt es eine möglichkeit die ganzen einzelne prüfungen wie EAN festlegen , Stückzahl festlegen usw. zu einer zusammenfügen ?

 'Hauptfunktion #########
 
    Private Function LoadCSV(file As String) As cDataTableCSV
        'CSV Datei laden - ggf. Schlüssel festlegen
        Dim dt As New cDataTableCSV
        dt.TableName = IO.Path.GetFileNameWithoutExtension(file)
        If Not dt.LoadFile(file, System.Text.Encoding.Default) Then Return _
          Nothing
        'dt.PrimaryKey = New DataColumn() {dt.Columns(0)}
        Return dt
    End Function
 
    'CSV-File lesen #########
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
 
        Dim file_open As New OpenFileDialog
        file_open.Filter = "csv-dateien|*.csv"
        file_open.AddExtension = True
 
        If file_open.ShowDialog = DialogResult.OK Then
 
            ds.Tables.Clear()
            ds.Tables.Add(LoadCSV(file_open.FileName))
 
            If Not ds.Tables.Count = 1 Then
                MessageBox.Show("Eine Datei konnte nicht gelesen werden")
                Exit Sub
            End If
 
            'Spalten in Ausgabedatei erstellen
            dtout = New cDataTableCSV
 
            dtout.Columns.Add("Action") : dtout.Columns.Add("Category")
            dtout.Columns.Add("Title") : dtout.Columns.Add("Beschreibung")
            dtout.Columns.Add("Kato")
 
	    '+++++++ Habe ich etwas gekürzt ++++++++++++
 
            'Spalteninhalte einer Zeile als Zeichenfolge kombinieren
            Dim line As New System.Text.StringBuilder
 
           'Zeilen als Zeichenfolge kombinieren
            Dim text As New System.Text.StringBuilder
            dtout.Rows.Add({"*Action", "*Category", "*Title",
                    "*Description", "Kato"})
            Try
                For rowindex As Integer = 1 To ds.Tables(0).Rows.Count - 1
                    'zusätzliche Zeile einfügen
                    Dim row As DataRow = ds.Tables(0).Rows(rowindex)
 
                   'Ausgabedatensatz aufbauen
                    Dim orow As DataRow = dtout.NewRow
 
                    orow("Action") = "Add"
                    orow("Category") = KategoriennummerTextBox.Text
                    orow("Title") = row("SP_0") & " " & row("SP_1") & " " & _
                      ComboBox.Text & " - Art.Nr. " & row("SP_2")
                    orow("Beschreibung") = TextBox5.Text & row("SP_3").ToString _
                    & TextBox6.Text
 
 		    '+++++++ Habe ich etwas gekürzt ++++++++++++
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 05.09.16 01:04

Habe den Code in zwei Teile Posten müssen wegen der 5kb begrenzung

 ' Versandkosten ermitteln Spalte 6 #########
 
                    '1.Schritt:
                    Dim val As String = row("SP_6").ToString
 
                    '1a.) 
                    val = val.Replace("."c, ",")
 
                    '2.Schritt:
                    Dim dec As Decimal
 
                    '3.Schritt:
                    If Decimal.TryParse(val, dec) Then
                        '4. Schritt:
                        If dec <= 70 Then
                            orow("Versandkosten") = "5,9"
                        Else
                            orow("Versandkosten") = "0"
                        End If
                    Else
                        orow("Versandkosten") = "" 'Leerstring oder 
                        ' Missing-Kennung zuweisen
                    End If
 
                    ' Preis ermitteln #########
 
                    '1.Schritt:
                    Dim val2 As String = row("SP_6").ToString
                    '1a.) 
                    val2 = val2.Replace("."c, ",")
                    '2.Schritt:
                    Dim dec1 As Decimal
                    '3.Schritt:
                    If Decimal.TryParse(val2, dec1) Then
                        '4. Schritt:
                        If dec1 = 000 Then
                            orow("Preis") = row("SP_5") 
                        End If
                    Else
                        orow("Preis") = "" 'Leerstring oder Missing-Kennung 
                        ' zuweisen
                    End If
 
                    ' Stückzahl festlegen #########
                    '1.Schritt:
                    Dim val4 As String = row("SP_4").ToString
                    '1a.) 
                    val4 = val4.Replace("."c, ",")
                    '2.Schritt:
                    Dim dec4 As Decimal
                    '3.Schritt:
                    If Decimal.TryParse(val4, dec4) Then
                        '4. Schritt: 
                        If dec4 >= 20 Then
                            orow("Stückzahl") = "10" 
                        End If
                    Else
                        orow("Stückzahl") = "" 'Leerstring oder Missing-Kennung 
                        ' zuweisen
                    End If
 
                    ' EAN festlegen #########
                    '1.Schritt:
                    Dim val5 As String = row("SP_7").ToString
                    '1a.) 
                    val5 = val5.Replace("."c, ",")
                    '2.Schritt:
                    Dim dec5 As Decimal
                    '3.Schritt:
                    If Decimal.TryParse(val5, dec5) Then
                        '4. Schritt: 
                        If dec5 = Nothing Then
                            orow("EAN") = row("SP_7") 
 
                        End If
                    Else
                        orow("EAN") = "Nicht zutreffend" 'Leerstring oder 
                        ' Missing-Kennung zuweisen
                    End If
 
                    ' Tabelle Füllen #########
 
                    dtout.Rows.Add(orow)
 
                    'Ausgabe-Datensatz als Text aufbereiten
                    line.Clear()
                        For i As Integer = 0 To orow.ItemArray.Length - 1
                            line.Append(orow(i).ToString & ";")
                        Next i
 
                    Next rowindex
                Catch ex As Exception
                    MessageBox.Show("Abbruch - Fehler: " & ex.Message)
                    Exit Sub
                End Try
 
                'Ausgabe als Text anzeigen
                DataGridView1.DataSource = dtout
                DataGridView1.CurrentCell = Nothing
                DataGridView1.Rows(0).Visible = False
       End If
    End Sub


Beitrag wurde zuletzt am 05.09.16 um 01:06:09 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Manfred X
Datum: 05.09.16 09:51

'Zwei Hilfsvariablen für die TryParse-Methode erstellen (vor der 
' Datensatz-Schleife)
Dim st As Globalization.NumberStyles = _
  Globalization.NumberStyles.AllowDecimalPoint
Dim cult As Globalization.CultureInfo = _
Globalization.CultureInfo.InvariantCulture
 
 
 
'In der Schleife: Für jeden Datensatz ... (row / orow)
 
'Initialisierungswerte zuweisen
orow("Versandkosten") = ""
orow("Preis") = ""
 
'Bedingungen für SP_6 bearbeiten
If Decimal.TryParse(row("SP_6").ToString, st, cult, dec) Then
   If dec <= 70 Then
      orow("Versandkosten") = "5,9"
   Else
      orow("Versandkosten") = "0"
   End If
 
   If dec = 0 Then
      orow("Preis") = row("SP_5")
   End If
End If
 
'.... weitere Bedingungen für andere Spalten entsprechend
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 05.09.16 10:18

Moin,

Vielen Dank, damit kann ich nun mein Code ein wenig übersichtlicher machen.

Kann ich da nun auch den Bindingsource-Filter anwenden aus deinem ersten beitrag ?

Gibt es allgemein noch verbesserungs möglichkeiten bei meinem Code ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Manfred X
Datum: 05.09.16 11:14

Die Arbeitsweise des Bindingsource-Filters setzt voraus,
daß die Spalten in der angebundenen Datatable spezifische
Datentypen besitzen.
Du scheinst aber mit CSV-Dateien zu operieren.
Dabei werden die Daten allgemein als Zeichenfolgen geführt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 05.09.16 11:52

Genau es wird eine CSV-Datei eingelesen.

In der Spalte 0 steht z.b "Test" und in der Spalte 2 Zahlen z.b "100, 2345, 5000 usw."

Nun soll in Spalte 0 nach "test" gesucht werden, wurde "test" gefunden sollen alle Zahlen zwischen 2300 und 2400 gesucht werden und anschließend in Spalte 3 ein neues Wort geschrieben werden.

Also muss ich mir Zeichenfolgen etwas genauer anschauen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 18.09.16 23:57

Hallo,

Komme leider seit ein paar Tagen nicht weiter.

Wenn ich den Filter anwende, Bekomme nun bei folgendem Code:
Dim r As DataRow = DirectCast(bs(i), DataRowView).Row
Diesen fehler angezeigt:

Abbruch - Fehler: Das Objekt des Typs "System.Data.DataViewManagerListItemTypeDescriptor" kann nicht in Typ "System.Data.DataRowView umgewandelt werden.

Wie kann ich denn den Fehler beheben ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Spalte durchsuchen 
Autor: Vegas85
Datum: 19.09.16 22:52

Hallo,

Habe den Fehler gefunden, hatte die falsche DataSource

Läuft auch soweit fast wie es soll. Nur wird leider der Filter nicht richtig ausgeführt.

Bei "Art >= 1050 AND Art <= 1055" wird nach der 1055 einfach weiter in die Spalte Kato geschrieben.

Woran könnte das liegen?

Ist es auch möglich mehre Filter auf die gleiche DataSource anzuwenden? bzw. geht das auch einfacher, denn ich habe zwar in meinem Code diesen schon angewendet aber sieht nicht wirklich elegant aus.

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
 
Public Class Form1
 
    Dim ds As New DataSet
    Dim dt1, dt2, dtout As cDataTableCSV
 
    Private Function LoadCSV(file As String) As cDataTableCSV
        'CSV Datei laden - ggf. Schlüssel festlegen
        Dim dt As New cDataTableCSV
        dt.TableName = IO.Path.GetFileNameWithoutExtension(file)
        If Not dt.LoadFile(file, System.Text.Encoding.Default) Then Return _
          Nothing
        'dt.PrimaryKey = New DataColumn() {dt.Columns(0)}
        Return dt
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
 
        Dim file_open As New OpenFileDialog
        file_open.Filter = "csv-dateien|*.csv"
        file_open.AddExtension = True
 
        If file_open.ShowDialog = DialogResult.OK Then
 
            ds.Tables.Clear()
            ds.Tables.Add(LoadCSV(file_open.FileName))
 
 
            If Not ds.Tables.Count = 1 Then
                MessageBox.Show("Eine Datei konnte nicht gelesen werden")
                Exit Sub
            End If
 
            'Spalten in Ausgabedatei erstellen
            dtout = New cDataTableCSV
 
            dtout.Columns.Add("Mark") : dtout.Columns.Add("Art") : _
              dtout.Columns.Add("Kato")
 
            'Spalteninhalte einer Zeile als Zeichenfolge kombinieren
            Dim line As New System.Text.StringBuilder
 
            'Zeilen als Zeichenfolge kombinieren
            Dim text As New System.Text.StringBuilder
 
            dtout.Rows.Add({"Kato"})
 
            Try
                For rowindex As Integer = 1 To ds.Tables(0).Rows.Count - 1
                    'zusätzliche Zeile einfügen
                    Dim row As DataRow = ds.Tables(0).Rows(rowindex)
                    'Ausgabedatensatz aufbauen
                    Dim orow As DataRow = dtout.NewRow
 
                    orow("Mark") = row("SP_0")
                    orow("Art") = row("SP_2")
 
                    'Filter anwenden
                    Dim bs As New BindingSource
                    Dim bs2 As New BindingSource
 
                    bs.DataSource = dtout
                    bs2.DataSource = dtout
 
                    'Datensatz-Filter setzen
                    bs.Filter = "Mark = 'Haus' AND Art >= 1050 AND Art <= 1055"
                    bs2.Filter = "Mark = 'Wetter' AND Art >= 232334 AND Art" & _
                      "<= 232345"
 
                    'Gefilterte Datensätze bearbeiten
                    For i As Integer = 0 To bs.Count - 1
                        Dim r As DataRow = DirectCast(bs(i), DataRowView).Row
                        orow("Kato") = "selected"
                    Next i
 
                    For i As Integer = 0 To bs.Count - 1
                        Dim r As DataRow = DirectCast(bs2(i), DataRowView).Row
                        orow("Kato") = "Hallo"
                    Next i
 
                    'Filter entfernen
                    bs.Filter = ""
 
                    ' Tabelle Füllen 
 
                    dtout.Rows.Add(orow)
 
                    'Ausgabe-Datensatz als Text aufbereiten
                    line.Clear()
                    For i As Integer = 0 To orow.ItemArray.Length - 1
                        line.Append(orow(i).ToString & ";")
                    Next i
 
 
                Next rowindex
            Catch ex As Exception
                MessageBox.Show("Abbruch - Fehler: " & ex.Message)
                Exit Sub
            End Try
 
            'Ausgabe als Text anzeigen in DGV
            DataGridView1.DataSource = dtout
 
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel