vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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
mit Listview rechnen 
Autor: Leberkas
Datum: 21.01.17 19:09

Hallo,

ich lese mir über folgenden Code eine csv Datei ein:

Public Class Form1
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            ListView1.View = View.Details
            ListView1.GridLines = True
            ListView1.FullRowSelect = True
 
            ListView1.Clear()
 
            Dim oSR As New IO.StreamReader("C:\test.csv")
            Dim nSPalten() As String = oSR.ReadLine.Split(", ")
            Dim lstCol As New ListView.ColumnHeaderCollection(ListView1)
 
            For Each sSpalte As String In nSPalten
                lstCol.Add(sSpalte)
            Next
 
            While oSR.Peek > -1
                Dim lstItem As New ListViewItem(oSR.ReadLine.Split(","))
                ListView1.Items.Add(lstItem)
            End While
 
            Return
 
        Catch ex As Exception
            Return
        End Try
    End Sub
End Class
Aufbau der CSV
Aufsteigende Nr,Wert1,Wert2,Beschreibung

Nun suche ich nach einer Möglichkeit den Wert der Textbox1 von den Werten der Spalte(Wert1) zu subtrahieren.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 22.01.17 13:56

Hallo,

das ganze hier funktioniert:

Public Class Form1
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            ListView1.View = View.Details
            ListView1.GridLines = True
            ListView1.FullRowSelect = True
 
            ListView1.Clear()
 
            Dim oSR As New IO.StreamReader("C:\test.csv")
            Dim nSPalten() As String = oSR.ReadLine.Split(", ")
            Dim lstCol As New ListView.ColumnHeaderCollection(ListView1)
 
            For Each sSpalte As String In nSPalten
                lstCol.Add(sSpalte)
            Next
 
            While oSR.Peek > -1
                Dim lstItem As New ListViewItem(oSR.ReadLine.Split(","))
                ListView1.Items.Add(lstItem)
            End While
 
            Return
 
        Catch ex As Exception
            Return
        End Try
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
 
        Dim flines As Integer = ListView1.Items.Count
        Label2.Text = flines
        Dim Lange As String = TextBox1.Text
 
 
        If TextBox1.Text = "" Then
 
        Else
 
 
            For i = 0 To flines - 1
 
                ListView1.Items(i).SubItems(1).Text = CDbl(ListView1.Items( _
                  i).SubItems(1).Text.ToString) - CDbl(Lange)
 
            Next i
 
 
        End If
 
 
 
    End Sub
 
End Class
Wenn ich aber das ganz mit ; getrennt habe und keine ganzen Zahlen verwende hängt er

Bin um jeden Tipp dankbar

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 22.01.17 15:57

Hallo!

Das liegt vielleicht am falschen CultureInfo,
das bei Interpretation des String als Gleitkommazahl
verwendet wird.

Schau Dir mal die Überladungen der Double.Tryparse-Methode an.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 22.01.17 16:38

Verstehe ich das richtig ?

Habe jetzt

Dim Lange As String = TextBox1.Text
in
Dim Lange As Double = TextBox1.Text
geändert
Double sollte das ja können ?

Bekomme aber in der Zeile den Fehler

ListView1.Items(i).SubItems(1).Text = CDbl(ListView1.Items( _
                  i).SubItems(1).Text.ToString) - CDbl(Lange)
ArgumentOutOfRangeException wurde nicht behandelt.

Was heißt das ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 23.01.17 04:13

Hallo,

du trennst ja auf ein bestimmtes Trennzeichen in der CSV Datei:
Dim lstItem As New ListViewItem(oSR.ReadLine.Split(","))
Zitat:

Wenn ich aber das ganz mit ; getrennt habe und keine ganzen
Zahlen verwende hängt er


Dann kann in den Elementen des durch Split erzeugten Array auch das Komma vorkommen. Da musst du schon wissen was für Daten du hast und noch wichtiger auf welches Trennzeichen du die CSV Datei splittest. (Das Trennzeichen kann nicht mehr in den einzelnen Elementen vorkommen) Und zu den Formaten für Zahlen hat dir ManfredX ja schon etwas gesagt, das passt auch.

Alternativ könntest du das Komma beim Einlesevorgang z.B. durch einen Punkt ersetzten. Das würde aber nur dann helfen wenn der Aufbau deiner CSV Datei immer gleich ist.

Beschreibe doch mal etws genauer worum es sich bei der zu analysierenden Datei handelt, Mal auf dieses oder jenes Trennzeichen zu splitten ist eher nicht üblich, so etwas kann bei Excel machen wo man das Trennzeichen angeben kann beim Import einer CSV Datei.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 25.01.17 20:01

Hallo,

hab das ganze jetzt hinbekommen. Die csv´s bekomme ich jetzt auch einheitlich.

Würde die Listview jetzt gerne noch durchsuchen.
Hier mal ein Bild von der Oberfläche.
https://picload.org/image/roaogolw/suche.jpg
Würde gerne über die Textboxe(n) die Listview durchsuchen. Wenn der Wert gefunden wird, sollte er in Listview2 geschrieben werden. Wenn nur ein Wert eingegeben ist soll er nur Spalte 1 durchsuchen, wenn beide Textboxen befüllt sind, sollten beide Kriterien übereinstimmen.

Bin für alle Tips dankbar.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 25.01.17 22:01

Hallo!

Schreibe die Daten in eine Datatable und binde sie
per Bindingsource an ein DatagridView.
Die Bindingsource stellt Filter- und Find-Methoden für
Datensätze zur Verfügung.

CSV-Editor

Filter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 28.01.17 19:29

Hallo,

danke für eure Antworten, leider noch alles bömische Dörfer
Gibt es eine einfachere Methode ?

Habe da noch eine zweites Problem.
würde gerne die Werte spalte1 mit spalte 2 addieren und in eine andere ausgeben

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles _
  Button2.Click
        Dim lvi As ListViewItem = Nothing
        lvi.SubItems(4).Text = lvi.SubItems(1).Text + lvi.SubItems(2).Text
    End Sub
Leider auch ohne Erfolg

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 29.01.17 03:45

Hallo,

damit du mathematische Operationen ausführen kannst braucht es entsprechende Datentypen in der Quelle. In einer CSv Datei ist das natürlich nicht gegeben, wenn du in einem Grid versuchst die Spaltenwerte per .text zuzuweisen und dann damit zu rechnen geht das auch schief. Du mußt irgendwann aus der CSV Datei die anzuzeigenden Daten auch umwndeln in Zahlen oder sonsteige Werte damit damit auch mathematisch rechnen kann.

Text1 = 4
Text2 = 3
Addition von Text1 + Text2 ergibt schlimmstenfalls 43 als Ergebnis.

Aber wie gesagt, ich hatte schon gefragt, was deine CSV behinhaltet.
ManfredX hat dir auch schon gute Hinweise gegeben, aber wie auch immer, mit Texten kann man halt nicht rechnen, irgendwo, irgendwann muss mal ein Datentyp festgelegt werden. Wenn nicht im Grid selbst, dann spätestens vor der Berechnung selbst. A + B ergibt bei Texten halt AB. Irgendwann muss der Datentyp so festgelegt werden, dass man damit rechnen kann.

Aber unabhängig davon:
Was kommt bei dir denn heraus als Ergebnis? Gar nichts, falsches Ergebnis, Fehlermeldung?

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 29.01.17 08:15

Hallo!

Ganz ohne Kenntnisse geht es nicht !!!!

Alles was Du machen möchtest, ist im Framework bzw. VBARCHIV bereits programmiert.
Du mußt es nur anwenden.

Wandle Deine CSV-Datei (Sicherheitskopie) in eine kultur-übliche Form um.
Vermutlich so ...
1. Ersetze global alle Kommas durch Strichpunkte
2. Ersetze global alle Dezimalpunkte durch Dezimalkommas

Erstelle ein Winforms-Projekt und füge die oben verlinkte Klasse cDatatableCSV
in das Projekt ein.
Folgender Code gehört in das Start-Formular Form1:
Public Class Form1
 
    Dim dt As New cDataTableCSV
 
    Dim bs As New BindingSource
 
    Dim dgv As New DataGridView With _
        {.Parent = Me, .DataSource = bs, .Top = 50}
 
 
    Dim txtFilter As New TextBox With _
        {.Parent = Me, .Width = 200}
 
    Dim WithEvents btnFilter As New Button With _
        {.Parent = Me, .Left = 210, .Width = 100, .Text = "Filter"}
 
 
    Private Sub Form1_Load(sender As System.Object, _
       e As System.EventArgs) Handles MyBase.Load
 
        If Not dt.LoadFile("C:\Daten\Numbers.csv", System.Text.Encoding.UTF8) _
          Then
            MsgBox("Datei konnte nicht geladen werden")
        Else
            'Beispiel für das Berechnen einer neuen Spalte 
            'incl. Konvertierung der Zeichenfolgen in numerische Werte  
            dt.Columns.Add("Computed", GetType(Double), _
                   "Convert(SP_1, 'System.Double') + _
                    Convert(SP_2, 'System.Double')")
            'Datenbindung herstellen
            bs.DataSource = dt
        End If
 
    End Sub
 
 
    Private Sub btnFilter_Click(sender As Object, _
        e As System.EventArgs) Handles btnFilter.Click
 
        Dim value As Double
 
        If Not Double.TryParse(txtFilter.Text, value) Then
            'Filter aufheben (leere oder falsche Filterangabe)
            bs.Filter = ""
        Else
            'Filter setzen
            bs.Filter = "Convert(SP_1, 'System.Double') = " & value
        End If
 
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 29.01.17 09:58

Ähem!
bs.Filter = "Convert(SP_1, 'System.Double') = " & _
value.ToString(System.Globalization.CultureInfo.InvariantCulture)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 29.01.17 16:37

Hallo,

habe alles so gemacht wie Manfred X beschrieben:

Meine csv:

100;150;Text;blau
100;250;Text;rot
300;350;Text;grün
400;450;Text;schwarz
500;350;Text;braun
600;600;Text;gelb
Die verlinkte Klasse cDatatableCSV von
http://www.vbarchiv.net/forum/id22_i100094t100062_mit-listview-rechnen.html

und den Code für die Form1.

Den Pfad zur csv habe ich angepasst. = C:\test1.csv
Leider lädt er die Daten nicht. An was kann das liegen ?

http://www.file-upload.net/download-12275400/DataTable.zip.html

MfG

Beitrag wurde zuletzt am 29.01.17 um 16:42:27 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 29.01.17 18:07

Die Klasse DatatableCSV vergibt die Spaltenbezeichner SP_0, SP_1, usw.
Bei Deinem Beispiel ist die dritte Spalte (SP_2) nicht numerisch.
Deshalb kann die Berechnung der Expression-Spalte (Computed) nicht erfolgen.
dt.Columns.Add("Computed", GetType(Double), _
         "Convert(SP_0, 'System.Double') + Convert(SP_1, 'System.Double')")
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 30.01.17 04:54

Hallo,

Zitat:


habe alles so gemacht wie Manfred X beschrieben:

Den Pfad zur csv habe ich angepasst. = C:\test1.csv
Leider lädt er die Daten nicht. An was kann das liegen ?


Was bedeutet dass die Datei nicht geladen wird?
Gibt es eine Fehlermeldung? Wenn ja welche?

Wenn die *.csv gar nicht erst erreicht werden kann von deinem Programm kann sie natürlich auch nicht weiter verarbeitet werden. (Da solltest du vorher prüfen, ob sie überhaupt existiert und erreichbar ist)

Und wenn sie erreichbar ist, dann musst du sie prüfen auf Plausibilität, in deinem Fall auf Zahlen mit denen man rechnen kann. Dazu hast du zwei Möglichkeiten:

Entweder beim Einlesen direkt auf Fehler prüfen, oder später vor der Berechnung wenn die Daten im Grid sind. Denn eine *.csv ist und bleibt eine Textdatei, die kann fehlerhaft sein und es wäre ja ärgerlich wenn bei z.B. 10.000 Datensätzen da z.B. 5 falsch sind und dein Programm dann irgendwann krachen geht weil nicht umgewandelt oder gerechnet werden kann. Also prüfen, prüfen und nochmals prüfen und Fehlerbehandlung einbauen. Dann bist du auf der sicheren Seite. Du kannst dich nie darauf verlassen, dass die Daten zu 100% korrekt sind.

Aber wie ManfredX schon geschrieben hat, ohne Grundkenntnisse geht es nicht.
Grade wenn man Berechnungen mit Zahlen, Datum/Uhrzeit usw. machen möchte ist das besonders wichtig.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 05.02.17 21:00

Hallo,

danke für eure Hilfe.
Schön langsam leuchtet das ganze ein, aber ich habe leider zu wenig Wissen.
Bin aber fleißig am probieren.

Habe jetzt meine Spalten umbenannt:
Me.Columns.Add("Nummer", GetType(String))
Me.Columns.Add("Länge", GetType(String))
Me.Columns.Add("Breite", GetType(String))
Me.Columns.Add("Bezeichnung", GetType(String))
Mit dem Filter suche ich in Länge
Dim value As Double
 
        If Not Double.TryParse(txtFilter.Text, value) Then
            bs.Filter = ""
        Else
            bs.Filter = "Convert(Länge, 'System.String') = " & value
        End If
Suche ein Möglichkeit nach zwei Kriterien gleichzeitig zu suchen.
Beide sollen aber funktionieren wenn nur eine Textbox gefüllt ist.

Könnte mir hier bitte noch jemand weiterhelfen ?

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 05.02.17 22:45

Hallo!

Du mußt ggf. beide Filter-Kriterien mit z.B. mit AND (OR) verbinden.
Im Beispiel wird der Filter durch den Fließkomma-Datentyp Decimal erstellt.
(Leere Eingabe in den Textboxen hebt die Filterbedingung jeweils auf)
Public Class frmDataExpression2
 
    Dim dt As New cDataTableCSV
 
    Dim bs As New BindingSource
    Dim dgv As New DataGridView With _
       {.Parent = Me, .DataSource = bs, _
        .Top = 50, .Width = 480, .Height = 400}
 
    'Filter-Controls
    Dim txtLaenge As New TextBox With _
        {.Parent = Me, .Width = 200}
    Dim txtBreite As New TextBox With _
        {.Parent = Me, .Width = 200, .Left = 210}
 
    Dim WithEvents btnFilter As New Button With _
        {.Parent = Me, .Left = 420, .Width = 100, .Text = "Filter"}
 
 
    Private Sub Form1_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.Size = New Size(500, 500)
 
        If Not dt.LoadFile("C:\Daten\Numbers2.csv", System.Text.Encoding.UTF8) _
          Then
           MsgBox("Datei konnte nicht geladen werden")
        Else
           dt.Columns(0).ColumnName = "Laenge"
           dt.Columns(1).ColumnName = "Breite"
           bs.DataSource = dt
        End If
    End Sub
 
 
    Private Sub btnFilter_Click(sender As Object, _
        e As System.EventArgs) Handles btnFilter.Click
 
        Dim Laenge, Breite As Decimal, filter As String = String.Empty
 
        bs.Filter = "" 
 
        'ggf. erste Filterbedingung setzen
        If Decimal.TryParse(txtLaenge.Text, Laenge) Then
            filter = "Convert(Laenge, 'System.Decimal') = " & _
            Laenge.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
 
        ggf. zweite Filterbedingung setzen
        If Decimal.TryParse(txtBreite.Text, Breite) Then
            'falls erste Bedingung gegeben --- Verknüpfung einschieben
            If Not filter = String.Empty Then filter &= " And "
 
            'zweite Bedingung setzen 
            filter &= "Convert(Breite, 'System.Decimal') = " & _
             Breite.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
 
        'Filterstring zuweisen 
        bs.Filter = filter
 
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 06.02.17 03:26

Hallo,
ManfredX hat dir ja schon einen guten Hinweis gegeben, aber ich verstehe folgendes noch nicht so ganz:

Zitat:

Suche ein Möglichkeit nach zwei Kriterien gleichzeitig zu suchen.
Beide sollen aber funktionieren wenn nur eine Textbox gefüllt ist.


Die zwei Kriterien müssen ja sein feststellen zu können ob beide Werte die du mathematisch berechnen möchtest auch tauglich (vorhanden) sind für eine Berechnung.

Was meinst du mit: wenn nur eine Textbox gefüllt ist soll das trotzdem funktionieren? Das kann nicht funktionieren. Wenn du zwei Werte für eine Addition brauchst, dann müssen auch genau zwei Werte vorhanden sein. Es sei denn, du führst eine weitere Bedingung ein, dass wenn ein Wert nicht vorhanden ist du diesen automatisch auf 0 setzt. Ob das sinnvoll für deine Berechnung ist weiß ich nicht. Bei Länge und Breite wird es sich wahrscheinlich um eine Multiplikation handeln die dann eine Fläche ergibt. Da ist das natürlich Quatsch einen Wert auf 0 zu setzen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 06.02.17 04:56

Hallo Franki,

das mit er addition ist ne andere Baustelle.
Habe es jetzt anders gelöst.....
Aber nochmals danke für die Hilfe


Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 06.02.17 06:09

na super, dass man das auch mal erfährt.
Bei Baustellenwechsel solltest du vielleicht einen neuen Beitrag mit anderem Thema posten.

Denn alles war hier steht könnte auch für zukünftige Leser interessant sein die auf diesen Thread im Forum kommen und da geht es halt um die Berechnung in einem ListView laut Thema.

Aber gut, freut mich, dass du das Problem lösen konntest.
Vielleicht schreibst du noch einen kurzen Hinweis wie du das gelöst hast, dann würde das wieder zum Ursprungsthema passen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 06.02.17 11:03

Hallo!

So wie ich das verstanden (und programmiert) habe,
soll man nur nach Länge, nur nach Breite und nach Länge und Breite
filtern können.
Realisiert wird das im Beispiel durch leere/ungültige Eingabe
in der nicht benötigten Filter-Textbox.

Was genau zusätzlich noch berechnet werden soll und wie dabei ggf.
mit ungültigen oder fehlenden Angaben umzugehen ist, kann ich nicht
beurteilen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 07.02.17 01:26

Hallo Manfred,

na ja, das Thema bzw. der erste Beitrag lautet ja mit Listview rechnen und nicht Listview filtern.

Deswegen hatte ich meine Antworten darauf augerichtet, dass es sich letztendlich um Berechnungen handelt die durchgeführt werden sollen. Und da reicht eine reine Filterung ohne zusätzliche Kriterien nicht aus.

Aber gut, vielleicht habe ich das auch falsch verstanden und mich vom Betreff des ersten Postings irritieren lassen und du hast das besser erkannt als ich.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: effeff
Datum: 07.02.17 11:26

Und ich würde grundsätzlich mit DataTables und DataGridViews arbeiten...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 08.02.17 11:51

Hallo!

So weit mir bekannt, werden Windows.Forms.Controls vom MicroSoft nicht mehr unterstützt.
Für Datenbankzugriffe ist inzwischen meist das EntityFramework im Einsatz.
Table und Grid würde ich nur noch als Demo/Übung für Einsteiger einstufen.
(Es lassen sich damit kurze, direkt ausführbare Beispiele erstellen.)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: effeff
Datum: 08.02.17 21:37

Nun, ich arbeite mit DataTables und dem DataGridView immer noch sehr gerne. Immerhin haben sich andere Techniken wie Lightswitch oder Silverlight auch schon wieder verabschiedet. Die Zukunft wird dann bei irgendwelchen Apps zu finden sein...

Immerhin ist dies das VB.NET-Forum und das EntityFramework gehört nicht (mehr) dazu...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 09.02.17 02:01

Hallo Manfred X
Zitat:


So weit mir bekannt, werden Windows.Forms.Controls vom
MicroSoft nicht mehr unterstützt.


Hast du da eine Quelle?
Forms wird es ja weiterhin geben (müssen) damit der Anwender mit einem Programm interagieren kann. Ob man das jetzt Programm, Software oder App nennt macht ja keinen Unterschied. Irgendwas braucht der User um Eingaben tätigen zu können (Das mit der Sprache funktioniert noch nicht wirklich, und die Gedankenübertragung ist in noch weiterer ferne)

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Manfred X
Datum: 09.02.17 07:58

Hallo!

Ich bin vor einiger Zeit auf einen - schon älteren - Forenbeitrag hingewiesen worden:
[I]Mainstream Support ends 4/12/2011. Extended Support ends 4/12/2016.[/I]
Ob diese Angabe inzwischen 'offiziell' ist, habe ich nicht recherchiert.
Neuere Beiträge zu diesem Thema sagen was anderes:
[I]As WinForms is now a fully integrated product of .NET Framework and support
for it is inline with its version of .NET Framework, we do not have any plans
to end the Winforms support. It is fully supported.[/I](August 2016)

Windows.Forms-Projekte bleiben wohl auch in Zukunft im Net-Framework verfügbar,
die Controls werden aber vermutlich nicht mehr weiterentwickelt oder überarbeitet.

Beitrag wurde zuletzt am 09.02.17 um 08:06:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Franki
Datum: 10.02.17 02:49

Hallo Manfred X,

vielen Dank für die Info bzw. den Link.
Ich vermute mal, dass das so ähnlich laufen wird wie mit den alten VB6 Programmen die auch unter aktuellen Windows Versionen noch laufen.

Selbst wenn die Controls nicht mehr weiter entwickelt werden sollten irgendwann, werden Windows.Forms Pojekte auch weiterhin lauffähig sein in zukünftigen Versionen des Frameworks vermute ich mal.

Also braucht man sich als Entwickler von Windows.Forms Projekten erst mal keine Sorgen zu machen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Filter, nächste größere Größe 
Autor: Leberkas
Datum: 01.05.17 09:00

Hi,

über diesen Filter
If Decimal.TryParse(txtNummer.Text, Nummer) Then
            filter = "Convert(Nummer, 'System.Decimal') = " & _
            Nummer.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
sucht er ja nach der genauen Länge in der Liste.
Wenn aber keine genaue Länge gefunden wird, wie kann ich dann nach der nächstgrößeren Länge suchen ?

Schönen 1 Mai
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mit Listview rechnen 
Autor: Leberkas
Datum: 01.05.17 09:02

Hi,

über diesen Filter
If Decimal.TryParse(txtNummer.Text, Nummer) Then
            filter = "Convert(Nummer, 'System.Decimal') = " & _
            Nummer.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
sucht er ja nach der genauen Länge in der Liste.
Wenn aber keine genaue Länge gefunden wird, wie kann ich dann nach der nächstgrößeren Länge suchen ?

Schönen 1 Mai
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter, nächste größere Größe 
Autor: Manfred X
Datum: 01.05.17 10:03

Hallo!

Diese Frage mußt Du genauer spezifizieren.
Geht es darum, innerhalb eines bestimmten Intervalls (nach oben begrenzt)
zu suchen, falls der exakte Wert nicht gefunden wird?
Oder soll unbegrenzt der nächst-höhere Wert ermittelt werden?

Da Du inzwischen eine Datatable verwendest, kann ein LINQ-Agregate
herangezogen werden:
Public Class frmLinqFind
 
    Dim dt As New DataTable
 
    Private Sub frmLinqFind_Load(sender As System.Object, _
                        e As System.EventArgs) Handles MyBase.Load
 
        'Testspalte und Testdaten (0-1)
        dt.Columns.Add("Values", GetType(Decimal))
        Dim rndm As New Random
        For i As Integer = 0 To 99
            dt.Rows.Add(CDec(rndm.NextDouble))
        Next i
 
        'zu suchende Untergrenze
        Dim limit As Decimal = 0.5D
 
        Dim q As Decimal = _
            Aggregate row As DataRow In dt.AsEnumerable _
                Where row.Field(Of Decimal)("Values") >= limit
            Into Min(row.Field(Of Decimal)("Values"))
 
    End Sub
End Class
Vorausgesetzt wird hier, daß das Limit nicht über dem größten Wert
in den Datensätzen liegt (sonst: Ausnahme wegen leerer Where-Sequenz)

Der gefundene Wert "q" kann z.B. in die Filterbedingung der Bindingsource
eingesetzt werden.

Beitrag wurde zuletzt am 01.05.17 um 10:11:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Filter, nächste größere Größe 
Autor: Manfred X
Datum: 01.05.17 10:18

siehe oben ...
http://www.vbarchiv.net/forum/id22_i100369t100062_filter-naechste-groessere-groesse.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter, nächste größere Größe 
Autor: Leberkas
Datum: 01.05.17 16:14

Hi,

leider fruchtet das ganze nicht.
Ich poste mal den ganzen Code, wie ich ihn jetzt habe.
Ich finde den Fehler nicht, damit er die nächstgrößere Seite findet

Public Class Form1
 
    Dim dt As New cDataTableCSV
 
    Dim bs As New BindingSource
    Dim dgv As New DataGridView With {.Parent = Me, .DataSource = bs, .Top = _
      50, .Width = 464, .Height = 509}
 
    'Filter-Controls
    Dim txtNummer As New TextBox With {.Parent = Me, .Width = 90, .Left = 52, _
      .Top = 20}
    Dim txtLaenge As New TextBox With {.Parent = Me, .Width = 90, .Left = 152, _
    .Top = 20}
    Dim txtBreite As New TextBox With {.Parent = Me, .Width = 90, .Left = 252, _
    .Top = 20}
 
    Dim WithEvents btnFilter As New Button With {.Parent = Me, .Left = 8, .Top _
      = 20, .Width = 30, .Text = "Go"}
 
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
      Handles MyBase.Load
 
        Dim sAppPath As String
        sAppPath = Application.StartupPath
        Me.Size = New Size(480, 597)
 
        If Not dt.LoadFile(sAppPath & "\Seiten.csv", System.Text.Encoding.UTF7) _
          Then
            MsgBox("Datei konnte nicht geladen werden")
        Else
            dt.Columns(0).ColumnName = "Nummer"
            dt.Columns(1).ColumnName = "Laenge"
            dt.Columns(2).ColumnName = "Breite"
            dt.Columns(3).ColumnName = "Bezeichnung"
            bs.DataSource = dt
        End If
 
 
    End Sub
 
 
    Private Sub btnFilter_Click(sender As Object, _
        e As System.EventArgs) Handles btnFilter.Click
 
        Dim Laenge, Breite, Nummer As Decimal, filter As String = String.Empty
 
        bs.Filter = ""
 
        ' Teilenummer
        If Decimal.TryParse(txtNummer.Text, Nummer) Then
            filter = "Convert(Nummer, 'System.Decimal') = " & _
            Nummer.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
 
        ' Länge
        If Decimal.TryParse(txtLaenge.Text, Laenge) Then
            filter = "Convert(Laenge, 'System.Decimal') = " & _
            Laenge.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
 
        ' Breite
        If Decimal.TryParse(txtBreite.Text, Breite) Then
            'falls erste Bedingung gegeben --- Verknüpfung einschieben
            If Not filter = String.Empty Then filter &= " And "
 
            'zweite Bedingung setzen 
            filter &= "Convert(Breite, 'System.Decimal') = " & _
             Breite.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End If
 
        'Filterstring zuweisen 
        bs.Filter = filter
 
    End Sub
 
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter, nächste größere Größe 
Autor: Manfred X
Datum: 01.05.17 18:07

   'Laenge
   If Decimal.TryParse(txtlaenge.Text, laenge) Then
      Dim filterlaenge As Decimal = _
           Aggregate row As DataRow In dt.AsEnumerable _
              Where Not IsDBNull(row("Laenge")) AndAlso _
                    laenge <= CDec(row.Field(Of String)("Laenge"))
           Into Min(CDec(row.Field(Of String)("Laenge")))
 
      filter = "Convert(Laenge, 'System.Decimal') = " & _
      filterlaenge.ToString(System.Globalization.CultureInfo.InvariantCulture)
   End If
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