vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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 - Fortgeschrittene
Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 06.06.17 12:29

  Private Sub Suche_CodelinksUndMarkiere(ByVal DGV As DataGridView, ByVal _
    CodeLinks As String)
        Dim Seriennummer As String = String.Empty
        Dim Fahrgestellnummer As String = tbx_Fahrgestellnummer.Text
        Dim ZsbNummer As String = String.Empty
        Dim Links As String = tbx_Eingabe1_BC.Text
        Dim Rechts As String = String.Empty
 
        Dim aktZellenInhalt As String = String.Empty
 
        Dim anzahl_gefunden As Integer = 0
 
        With DGV
            'alle Zeilen des DataGridView1 durchlaufen
            For i = 0 To DGV.Rows.Count - 1
                Dim Gefunden As Boolean = False
 
                'da wir den Frachttyp nur in Spalte 0 (DataGridView1 
                ' Spaltenname "Frachttyp") suchen:
 
                'Inhalt von Spalte 0 in Reihe i
                aktZellenInhalt = .Rows(i).Cells(0).Value.ToString
 
                'prüfen, ob Inhalt die Zeichenkette "Codelinks" enthält (egal 
                ' ob am Anfang, in der Mitte oder am Ende)
                If aktZellenInhalt.ToLower.Contains(CodeLinks.ToLower) Then
                    'Inhalt Spalte 0 rausfischen (Sperrliste)
                    Seriennummer = .Rows(i).Cells(0).Value.ToString
                    'Inhalt Spalte 3 rausfischen (ZsbNummer)
                    ZsbNummer = .Rows(i).Cells(1).Value.ToString
 
                    'beide Spalteninhalte dem DataGridView2 hinzufügen
                    Dim Auswahl As String() = {Fahrgestellnummer, ZsbNummer, _
                      Links, Rechts}
                    Me.DataGridView2.Rows.Add(Auswahl)
 
                End If
            Next i
        End With
 
        'gefundene Einträge als Zahl ausgeben
        tbx_Bauteil_Anz_NIO.Text = Me.DataGridView2.Rows.Count.ToString
    End Sub
Vorhaben: mit obigen Code durchsuche ich in einer Spalte einen String wenn vorhanden soll die Zeile in eine 2te DGV, das klappt soweit auch. Hier mit dem CodeLinks aus einer TextBox


das gleiche mache ich noch mal mit dem CodeRechts. Dadurch erhalte ich wenn vorhanden 2 Zeilen.

ich möchte aber ein anderes Ergebnis erzielen.

Eine Zeile = Fahrgestellnummer, ZsbNummer, Links, Rechts

nun soll in die Zeile Fahrgestellnummer, CodeLinks wenn gefunden, oder CodeRechts wenn gefunden
wenn nicht gefunden dann Zeile Fahrgestellnummer, "-", Links-IO, rechts-IO. oder jeweils der gefundene Code.

kann mir jemand helfen, und folgen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 06.06.17 15:00

Hallo,
wenn ich richtig verstanden habe, würde ich beim ersten Code noch Platzhalter für den zweiten Code einfügen und dem 2.dgv adden. Dann hast du schon mal alle gewünschten Zellen angelegt. Danach musst du den zweiten Code in die vorhandene Row in dgv 2 einfügen, also die leeren Zellen füllen. Über einen eindeutige Key kannst du diese zum Beispiel dann zuordnen.

Oder du speicherst das Ergebnis aus dem ersten Code zwischen und addest die neue row erst wenn du alle Zellwerte hast.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 06.06.17 15:53

Sorry, Danke für deine Antwort aber so ganz kann ich noch nicht nachvollziehen was du meinst
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 06.06.17 16:18

Was genau verstehst du an meiner Antwort nicht?

Grüße Andi

Beitrag wurde zuletzt am 06.06.17 um 16:19:48 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 06.06.17 17:20

na ja wie meinst du das mit den Platzhalter im 2 Code?

kannst du das in meinem Code demontrieren?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 06.06.17 19:39

Ich kann dir leider im Moment kein Snippet geben, hab nur mein Handy zur Hand...

Es kommt darauf an wie du die Spalten in deinem 2. dgv erzeugst. Falls du sie vorher nicht definierst, sondern über Rows.Add mit deinem stringarray erzeugst musst du für die Zellen die aus dem 2. Code hinzu fügen willst, Leerstrings in das Array dazu machen. Dann hast du die eine gewünschte Row in deinem 2. dgv. Nun musst du noch deinen 2. Code ausführen und die Ergebnisse in die soeben erzeugte Row einfügen mit cell.value =..

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 06:18

Hallo Andi,

OK, wenn du wieder am PC bist......

hier mal die erste Suche für Links

Suche_CodelinksUndMarkiere(DataGridView1, CodeLinks)
 'Code links suchen und in DGV2 bei Fund schreiben
    Private Sub Suche_CodelinksUndMarkiere(ByVal DGV As DataGridView, ByVal _
      CodeLinks As String)
        Dim Seriennummer As String = String.Empty
        Dim Fahrgestellnummer As String = tbx_Fahrgestellnummer.Text
        Dim ZsbNummer As String = String.Empty
        Dim Links As String = tbx_Eingabe1_BC.Text
        Dim Rechts As String = String.Empty
 
        Dim aktZellenInhalt As String = String.Empty
 
        Dim anzahl_gefunden As Integer = 0
 
        With DGV
            'alle Zeilen des DataGridView1 durchlaufen
            For i = 0 To DGV.Rows.Count - 1
                Dim Gefunden As Boolean = False
                'da wir den Code nur in Spalte 0 (DataGridView1 Spaltenname 
                ' "Seriennummer") suchen:
                'Inhalt von Spalte 0 in Reihe i
                aktZellenInhalt = .Rows(i).Cells(0).Value.ToString
                'prüfen, ob Inhalt die Zeichenkette "CodeLinks" enthält (egal 
                ' ob am Anfang, in der Mitte oder am Ende)
                If aktZellenInhalt.ToLower.Contains(CodeLinks.ToLower) Then
                    DataGridView1.Rows(i).Selected = True
                    DataGridView1.FirstDisplayedScrollingRowIndex = i
 
                    'Inhalt Spalte 0 rausfischen (Sperrliste)
                    Seriennummer = .Rows(i).Cells(0).Value.ToString
                    'Inhalt Spalte 3 rausfischen (ZsbNummer)
                    ZsbNummer = .Rows(i).Cells(1).Value.ToString
 
                    'beide Spalteninhalte dem DataGridView2 hinzufügen
                    Dim Auswahl As String() = {Fahrgestellnummer, ZsbNummer, _
                      Links, Rechts}
                    Me.DataGridView2.Rows.Add(Auswahl)
                End If
            Next i
        End With
 
        'gefundene Einträge als Zahl ausgeben
        tbx_Bauteil_Anz_NIO.Text = Me.DataGridView2.Rows.Count.ToString
    End Sub
Suche_CodeRechtsUndMarkiere(DataGridView1, CodeRechts)
 'Code rechts suchen und in DGV2 bei Fund schreiben
    Private Sub Suche_CodeRechtsUndMarkiere(ByVal DGV As DataGridView, ByVal _
      CodeRechts As String)
        Dim Seriennummer As String = String.Empty
        Dim Fahrgestellnummer As String = tbx_Fahrgestellnummer.Text
        Dim ZsbNummer As String = String.Empty
        Dim Links As String = String.Empty
        Dim Rechts As String = tbx_Eingabe2_BC.Text
        Dim aktZellenInhalt As String = String.Empty
 
        Dim anzahl_gefunden As Integer = 0
 
        With DGV
            'alle Zeilen des DataGridView1 durchlaufen
            For i = 0 To DGV.Rows.Count - 1
                Dim Gefunden As Boolean = False
                'da wir den Code nur in Spalte 0 (DataGridView1 Spaltenname 
                ' "Seriennummer") suchen:
                'Inhalt von Spalte 0 in Reihe i
                aktZellenInhalt = .Rows(i).Cells(0).Value.ToString
                'prüfen, ob Inhalt die Zeichenkette "CodeRechts" enthält (egal 
                ' ob am Anfang, in der Mitte oder am Ende)
                If aktZellenInhalt.ToLower.Contains(CodeRechts.ToLower) Then
                    DataGridView1.Rows(i).Selected = True
                    DataGridView1.FirstDisplayedScrollingRowIndex = i
 
                    'Inhalt Spalte 0 rausfischen (Sperrliste)
                    Seriennummer = .Rows(i).Cells(0).Value.ToString
                    'Inhalt Spalte 3 rausfischen (ZsbNummer)
                    ZsbNummer = .Rows(i).Cells(1).Value.ToString
 
                    'beide Spalteninhalte dem DataGridView2 hinzufügen
                    Dim Auswahl As String() = {Fahrgestellnummer, ZsbNummer, _
                      Links, Rechts}
                    Me.DataGridView2.Rows.Add(Auswahl)
                End If
            Next i
        End With
 
        'gefundene Einträge als Zahl ausgeben
        tbx_Bauteil_Anz_NIO.Text = Me.DataGridView2.Rows.Count.ToString
    End Sub
das erzeugt aber 2 Zeilen im Datagridview2, das soll aber in eine Zeile(der geprüften Fahrgestellnummer) noch besser wäre in Datagridview den Fund "gelb markieren" und in Datagridview
halt Rot wenn Code gefunden bzw. Grün wenn nicht gefunden
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 07.06.17 09:48

Du willst also die zusammen gehörenden Suchergebnisse aus deinen zwei Methoden in einer Zeile in dgv2 haben?

Dann darf nur die Methode die du als erstes aufrufst eine row in dgv2 adden. Die zweite Methode muss ihre Suchergebnisse in die row schreiben, die die erste Methode erzeugt hat. Damit erreichst du dann dass alles in einer row steht.

Ich hoffe dein Problem richtig verstanden zu haben.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 11:16

genau so Richtig verstanden.

ich prüfe pro Fahrgestellnummer Linke Seite und gleichzeitig die rechte Seite Ergebnis der Suche eine Zeile Code oder und farblich kennzeichnen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 07.06.17 11:33

Okay. Hast du dann verstanden was ich dir in meiner letzten Erklärung sagen wollte?

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 12:19

Hast du dann verstanden was ich dir in meiner letzten Erklärung sagen wollte?

Nein noch nicht wirklich, Sorry kann auch nicht wirklich sagen was ich da nicht verstanden habe.

evtl. neuer Versuch es zu beschreiben welchen Gedanke du da für die passende Funktion hättest.

oder ich habe noch keinen Plan wie man es in einem geeigneten Code umsetzen könnte, darum habe ich es auch mit den 2 Codes probiert. Das funktioniert ja auch nur nicht pro Fahrgestellnummer bzw. Zeile.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 07.06.17 13:16

Warum willst Du in einem DGV nach Daten suchen? Es wäre doch einfacher, mittels einer Abfrage mit den von Dir gewünschten Kriterien eine DataTable zu füllen, an die Du das DGV2 bindest, oder nicht?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 13:39

Warum willst Du in einem DGV nach Daten suchen?

weil in der 1-DGV die Kriterien stehen die gesucht werden sollen.

die 2-DGV dient dazu das Ergebnis wieder zugeben, ist weder die erste noch die 2 gebunden
ich lese in die erste nur eine txt Datei ein, danach bginnt schon meine Recherche (Kontrolle) wenn man so will.

also auch wenn ich es über Datatable mache wäre das Konzept wie beschrieben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 07.06.17 13:40

effeff hat natürlich recht. Wenn du das umsetzen kannst wäre es effektiver.

Um nochmal auf deinen Code zurück zu kommen. Bei jedem Aufruf einer deiner Methoden (wenn sie etwas findet) wird eine neue Row in dgv2 erzeugt. Weil du jedes Mal Row.Add aufrufst. Klar soweit? Ich wollte beschreiben wie du das in eine Zeile bekommst.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 14:27

Weil du jedes Mal Row.Add aufrufst. Klar soweit?

ja das kann ich nachvollziehen. wie in eine Zeile? das es plausibel zur Fahrgestellnummer passt

auf der linken Seite "OK" rechte Seite nicht OK weil Code gefunden.

effeff, wenn es efektiver ist gehe ich mit dir.

Ablauf Plan:

ich erhalte eine Liste Übersicht mit Fehlerhaften na ja Teilen, die sind Codiert (Seriennummern)

Spaltennamen: Seriennummer, Zsb-Nummer, Baudatum Typen: alle String

diese Liste muss nun Seriennummer für Seriennummer mit Teilen im Lager Beispielsweise verglichen werden
ist das Teil aus der Liste im Lager vorhanden ist es fehlerhaft.

das gleiche soll noch mal im Fahrzeug gemacht werden, aber eben Links, Rechts mittels Scanner zum Beispiel oder alternativ Texteingabe Links Rechts, suchen finden und das dokumentieren (über die 2. DGV)


ich nehme jeden Vorschlag oder Beispiel an, der mir hilft da eine sichere Variante zu bauen.

Beitrag wurde zuletzt am 07.06.17 um 14:40:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 07.06.17 14:43

Ich gehe mal davon aus dass die Fahrgestellnummer eindeutig ist. Dann durchläufst du zum Einfügen der Suchergebnisse aus der 2. Methode dein dgv2 bis du die row mit der passenden Fahrgestellnummer hast, dann kannst du deine Daten in die Zelle reinschreiben mit .Row(i).Cell(3).Value = Coderechts

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 15:51

die Idee wäre ja nicht schlecht, aber die Fahrgestellnummer habe ich in dem Fall nicht vorher

oder verstehe ich dich wieder falsch?

die fehlerhaften Teile stehen in DGV1 und mit der Suche in der DGV1 nach der Serienummer
kann ich erst erkennen ob aus der DGV1 evtl. so ein Teil in der Fahrgestellnummer vorhanden ist

verstehst mich?

lass uns doch noch mal die Variante probieren die ich mit 2 Codes probiert habe.

evtl. haste eine Idee bzw. schreib den Code ich teste ihn ob es dem entspricht wo ich hin möchte.

man kann hier leider kein Projekt hoch laden?

Beitrag wurde zuletzt am 07.06.17 um 15:55:26 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 07.06.17 16:34

Ich ahne jetzt auch Problematik, jedoch verstehe ich nicht ganz. Schreib doch mal ein Beispiel wie die Daten in dgv1 aussehen und wie was zusammen gehört. Ich habe hab die nächsten Tage keine Möglichkeit etwas in visual Studio zu testen.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 18:32

Ok probier ich mal.
das lade ich in die DGV-1
Seriennummer,Bauteil,Baudatum
AHEF4W3,5Q0512013JG,15.05.201723:35:01
AHEF4W4,5Q0512013JG,15.05.201723:35:01
AHEF4W7,5Q0512013JG,15.05.201723:35:32
AHEF4W8,5Q0512013JG,15.05.201723:35:32 X
AHEF4WB,5Q0512013JG,15.05.201723:35:58
AHEF4WC,5Q0512013JG,15.05.201723:35:58
AHEF4WF,5Q0512013JG,15.05.201723:36:23
AHEF4WG,5Q0512013JG,15.05.201723:36:23
AHEF4WJ,5Q0512013JG,15.05.201723:38:10
AHEF4WK,5Q0512013JG,15.05.201723:38:10
AHEF4WL,5Q0512013JG,15.05.201723:38:23
AHEF4WM,5Q0512013JG,15.05.201723:38:23
AHEF4WN,5Q0512013JG,15.05.201723:38:49 X
AHEF4WO,5Q0512013JG,15.05.201723:38:49
AHEF4WP,5Q0512013JG,15.05.201723:39:03
AHEF4WQ,5Q0512013JG,15.05.201723:39:03
AHEF4WR,5Q0512013JG,15.05.201723:39:19
jetzt gibt es 2 möglichkeiten, die aber erforderlich sind!
1.) Variante
die Liste oben in DGV-1 können evtl. im Lager sein also vergleiche ich die Kiste im Lager ob die vorhandene Seriennummer in DGV-1 existiert dann wäre das Teil aus der Kiste Fehlerhaft bzw. nicht OK.
und kann das Teil in eine Kiste (DGV-2) verschieben. Ich habe mal oben in der Liste ein X in Zeile gesetzt, damit könnte man auch arbeiten um in der DGV-1 auszuwerten 16 noch zu prüfen, oder wurde bereits gefunden. Die Seriennummer ist 1 malig macht Sinn auch das abzufangen.
2.) Variante
gleiche Liste DGV-1 jedoch nicht im Lager sondern evtl. verbaut in einer Fahrgestellnummer (Fahrzeug)

in diesem Fall schau ich Links nach ob die Seriennummer in DGV-1 existiert somit wäre Fahrgestellnummer Links nicht OK, das würde ich mir auf ein Stück Papier wie folgt notieren
Fahrgestellnummer links nicht OK
nun muss ich auch schauen ob Rechts eine Seriennummer der DGV-1 existiert
auch das notiere ich wie Folgt Fahrgestellnummer Links nicht OK Rechts OK da die Seriennummer nicht in der Liste vorhanen ist.

es kann aber auch sein das weder Links noch Rechts Seriennummer in Fahrgestellnummer in DGV-1 existiert dann wäre Fahrgestellnummer Links OK Rechts OK

so wie ich es programmiert habe, bekomme ich es nicht ohne die zweite Zeile hin. bzw. wenn beide Seiten Links und Rechts nicht in DGV-1 finde müsste ich mir die Fahrgestellnummer mit der Bemerkung Links OK Rechts OK notieren. Das soll die DGV-2 übernehmen damit wäre ich effektiver aber auch Fehlerfrei solch einen Code manuell zu schreiben (da 7 stellig) kann ich das im Programm abfangen.

die gefundenen Seriennummern in DGV-1 mit einem X zu kennzeichnen, überlege ich gerade wäre eigentlich nicht schlecht dann könnte man zählen wieviele noch von X zu prüfen sind.

vieleicht versteht ihr du mich so besser.
so sieht also die DGV-2 aus (oder mein Notizzettel)


Fahrgestellnummer,Bauteil,Links,Rechts
Eintrag Beispiel:
123456789,5Q0512013JG,AHEF4W8,OK
123457891,5Q0512013JG,OK,AHEF4WN
123457782,nicht betroffen,OK,OK (hier denke ich ist ein Problem)
weil ich ja nun nichts aus DGV-1 nach DGV-2 verschieben kann,
der Eintrag für mich aber wichtig wäre, nun würde ja eine Auswertung entstehen 2 Fahrgestellnummern geprüft zum Beispiel

Beitrag wurde zuletzt am 07.06.17 um 18:41:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 07.06.17 18:34

Hoffentlich habe ich das richtig verstanden:

Du hast eine Textdatei, in der Daten stehen. Deine Daten 1. Diese lässt Du dir im DataGridview1 anzeigen.

Du hast ein zweites DataGridview, in welchem andere Daten stehen. Es sollen nun alle Daten angezeigt werden, die auf dem entsprechen, was im ersten DataGridview markiert ist. Dies sind Deine Daten 2 im DataGridView2.

Mein Lösungsansatz:

Du liest die Daten 1 aus der Textdatei in eine DataTable ein. Du benutzt diese DataTable als DataSource für das DataGridView1. Das DataGridView1 stellst Du so ein, dass Multiselect=False ist.

Deine anderen Daten, die offensichtlich einen Lagerbestand darstellen, schreibst Du auch in eine DataTable. Aus dieser DataTable erstellst Du eine DataView. Diese DataView benutzt Du als DataSource für das DataGridView2. Als Filter für die DataView benutzt Du den selektierten Eintrag aus DataGridView1. Damit werden Dir aus einer Gesamtmenge nur die passenden Sachen angezeigt bzw., wenn nicht vorhanden, nichts.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 07.06.17 18:51

Hallo effeff,
Danke!
ich habe es noch mal beschrieben, die DGV-2 ist sowas wie ein Notizzettel
lese meinen letzten Post bitte. Für die 2 DGV gibt es keine Liste da es verschiedene Orte gibt die zu prüfen sind, also suchen bzw. vergleichen. Das Lager war ist nur ein Ort (Variante-1)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 07.06.17 23:18

Du willst nichts anderes, als einfach nur per Hand überprüfen, ob irgendein Eintrag irgendwelche Teile beinhaltet, die irgendwo sein könnten, und wenn dieses nicht der Fall ist, willst Du die Einträge in einem zweiten DataGridView darstellen?

Du willst im Prinzip eine Inventur vornehmen?

Das x kennzeichnet, dass Du diesen Eintrag bereits abgearbeitet hast?

BTW:
Zitat:

Die Seriennummer ist 1 malig macht Sinn auch das abzufangen.


Schreib deine Daten in eine DataTable und mach die Spalte unique!

Sag mal: Dir reicht doch eine einzige Tabelle aus, die Du mit allen Möglichkeiten erweiterst!?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 08.06.17 04:20

Guten Morgen effeff,

Du willst im Prinzip eine Inventur vornehmen? nicht wirklich Kontrolle trifft eher zu
da die Teile ggf. Fehlerhaft sein könnten, nun will ich an verschiedenen Orten schauen ob solche Teile
vorhanden sind die auf einer (speziellen Liste, DGV-1) stehen.
Das x kennzeichnet, dass Du diesen Eintrag bereits abgearbeitet hast? wäre eine Variante

Dir reicht doch eine einzige Tabelle aus, die Du mit allen Möglichkeiten erweiterst!?
wie könnte die denn aussehem?

da auch mal andere Teile betroffen sein könnten, müssten auch diverse Filter rein.

zum Beispiel Datum von bis, oder Teil x und Teil Y.

ich schau mal was Cam-Andi meint.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 08.06.17 14:30

Mal so was grundsätzliches: Du schreibst die Daten direkt in das DataGridView und suchst auch darin. Was hältst Du denn von so etwas?

Du benötigst eine Textbox "txtSeriennummer" und ein DataGridView "DGV1". Die von Dir gepostesten Daten stehen in einer Textdatei, hier "e:\erbru.txt" drin; Dieses Beispiel dient nur erst einmal zum Umgang mit Daten...

Public Class Form1
 
    Dim dt1 As New DataTable
    Dim dv1 As DataView
    Dim BindingSource As BindingSource
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        dt1Initialisieren()
 
        dv1 = New DataView(dt1)
 
        BindingSource = New BindingSource()
        BindingSource.DataSource = dv1
 
        DGV1Initialisieren()
 
        DatenLaden()
 
    End Sub
 
    Private Sub DGV1Initialisieren()
 
        With DGV1
            .DataSource = BindingSource
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        End With
 
    End Sub
 
    Private Sub dt1Initialisieren()
 
        With dt1
            With dt1
                Dim IDCol As DataColumn = dt1.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Bauteil", Type.GetType("System.String"))
                .Columns.Add("Baudatum", Type.GetType("System.String"))
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dt1.Columns("ID")
        dt1.PrimaryKey = primaryKey
 
    End Sub
 
    Private Sub DatenLaden()
 
        Dim TextDatei As String = "e:\erbru.txt"
 
        Dim sr As New System.IO.StreamReader(TextDatei)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
 
    Private Sub txtSeriennummer_TextChanged(sender As Object, e As EventArgs) _
      Handles txtSeriennummer.TextChanged
 
        If Not txtSeriennummer.Text = "" Or Not txtSeriennummer.Text = Nothing _
          Then
            dv1.RowFilter = "Seriennummer LIKE '%" & txtSeriennummer.Text & "%'"
        End If
 
    End Sub
 
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: CAM-Andi
Datum: 08.06.17 14:55

Ich gesagt, ich habe deine Anforderungen immer noch nicht ganz verstanden. Versuche doch mal Vorschlag von effeff umzusetzen, ist auch der bessere, effizientere Weg oder besser gesagt der professionellere Weg, spätestens wenn ich viele Daten hast.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 08.06.17 15:45

Hallo habe deine Variante in meiner Anwendung (Reiter Variante-3) eingebaut

soweit verstanden, funktionierte auf Anhieb. Könnte wie weiter gehen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 08.06.17 16:26

BTW: Du hast Dir selber auf Deinen Originalpost geantwortet...

Hier ist nicht ersichtlich, mit wem Du dich unterhalten möchtest. Wenn Du auf einen Post antworten möchtest, dann öffne erst diesen Post und antworte dann, damit derjenige dann auch weiß, dass er gemeint ist.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 08.06.17 17:55

Sorry effeff,

die Antwort war für dich
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 08.06.17 20:07

OK. Du hast geschrieben, dass Du wissen möchtest, wie es weiter gehen kann.

Machen wir das doch zusammen. Du hast nun die Möglichkeit, eine Seriennummer in das Textfeld einzugeben. Alle Datensätze, die gefunden werden (in dem Beispiel einer), werden angezeigt. Was nun mit dem Datensatz geschehen soll, liegt nun an Dir.

-> Möchtest Du, dass dieser Datensatz in ein zweites DataGridView übernommen wird?

-> Oder soll eine zusätzliche Spalte eingefügt werden, in welcher "X" oder so steht dafür, dass dieser Datensatz gefunden wurde? Wie soll die Spalte dann heißen? Z. B. Status?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 09.06.17 06:07

Hallo effeff,

Machen wir das doch zusammen. Super

Sinnvoll wäre die zusätzliche Spalte also den Fund zu Kennzeichen, Wichtig ist das man es nicht 2 mal
finden darf (also Status) wäre glaube ich OK. evtl. kann es ja so realisieren x und gelb markieren um die Spalte (x) auszuzählen 30 von 35 gefunden. Ich muss das später auch drucken können als Bericht.

Speichern?

das verschieben in eine 2 DGV2 ist aber noch ein Thema Links Rechts Beispielsweise.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 09.06.17 09:54

OK! Hier kommt die nächste Stufe. Hinzugekommen ist eine Combobox "cmbAuswahl" sowie ein StatusStrip. Das StatusStrip ziehst Du auf die Form. Es wird sich unten in der Form einnisten. Klicke auf das Feld mit dem Pfeil nach unten und wähle "ToolStripStatusLabel" aus. Lasse den vorbestimmten Namen "ToolStipStatusLabel1".

Der Code:

Public Class Form1
 
    Dim dt1 As New DataTable
    Dim dv1 As DataView
    Dim BindingSource As BindingSource
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        dt1Initialisieren()
 
        dv1 = New DataView(dt1)
 
        BindingSource = New BindingSource()
        BindingSource.DataSource = dv1
 
        DGV1Initialisieren()
 
        DatenLaden()
 
        cmbAuswahlFuellen()
 
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub cmbAuswahlFuellen()
        With cmbAuswahl
            .Items.Add("Alle")
            .Items.Add("Gefundene")
            .Items.Add("Nicht gefundene")
        End With
    End Sub
 
    Private Sub DGV1Initialisieren()
 
        With DGV1
            .DataSource = BindingSource
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        End With
 
    End Sub
 
    Private Sub dt1Initialisieren()
 
        With dt1
            With dt1
                Dim IDCol As DataColumn = dt1.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Bauteil", Type.GetType("System.String"))
                .Columns.Add("Baudatum", Type.GetType("System.String"))
                .Columns.Add("Status", Type.GetType("System.String"))
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dt1.Columns("ID")
        dt1.PrimaryKey = primaryKey
 
    End Sub
 
    Private Sub DatenLaden()
 
        Dim TextDatei As String = "e:\erbru.txt"
 
        Dim sr As New System.IO.StreamReader(TextDatei)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
                newRow("Status") = ""
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
 
    Private Sub txtSeriennummer_TextChanged(sender As Object, e As EventArgs) _
      Handles txtSeriennummer.TextChanged
 
        If (Not txtSeriennummer.Text = "" Or Not txtSeriennummer.Text = _
          Nothing) And txtSeriennummer.Text.Length = 7 Then
            dv1.RowFilter = "Seriennummer LIKE '%" & txtSeriennummer.Text & "%'"
            For Each drv As DataRowView In dv1
                drv.Item(4) = "X"
            Next
            dt1.AcceptChanges()
        Else
            dv1.RowFilter = Nothing
        End If
 
    End Sub
 
    Private Sub cmbAuswahl_SelectedIndexChanged(sender As Object, e As _
      EventArgs) Handles cmbAuswahl.SelectedIndexChanged
        txtSeriennummer.Text = ""
 
        If cmbAuswahl.Text = "Alle" Then
            MsgBox("Alle")
            dv1.RowFilter = Nothing
            ToolStripStatusLabel1.Text = "Alle Datensätze: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Gefundene" Then
            dv1.RowFilter = "Status = 'X'"
            ToolStripStatusLabel1.Text = "Gefundene: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Nicht gefundene" Then
            dv1.RowFilter = "Status=''"
            ToolStripStatusLabel1.Text = "Nicht gefundene: " & dv1.Count
        End If
    End Sub
End Class
In dem Moment, in dem ein Eintrag einer Seriennummer gefunden wird, wird dieser Datensatz angezeigt und mit einem "X" markiert. Anhand der ComboBox kannst Du auswählen, ob Du "Alle" Datensätze, "Gefundene" oder "Nicht gefundene" angezeigt bekommen möchtest. Unten im ToolStipStatusLabel1 wird die Anzahl der entsprechenden Datensätze angezeigt!

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben; Teil 1 
Autor: effeff
Datum: 09.06.17 10:19

Nächste Stufe: Es sind ein OpenFileDialog1, ein SaveFileDialog1 und die Buttons "btnTextDateiLaden" mit der Beschriftung "Textdatei laden", "btnSpeichern" mit der Beschriftung "Speichern" und "btnLaden" mit der Beschrift "Laden" hinzugekommen. Mit dem ersten Button kannst Du deine Original-Textdatei laden, mit dem zweiten speicherst Du in eine XML-Datei, mit dem dritten lädst Du die Datei wieder. Bei der Initialisierung der DataTable ist der TableName hinzu gekommen, um die XML serialisieren zu können; Weil der Nachrichtentext zu lang geworden ist, poste ich Dir den Code in zwei Teilen. Dieses ist Teil 1:

Public Class Form1
 
    Dim dt1 As New DataTable
    Dim dv1 As DataView
    Dim BindingSource As BindingSource
    Dim SavePath As String = Environment.GetEnvironmentVariable("appdata") & _
      "\erbru"
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        dt1Initialisieren()
 
        dv1 = New DataView(dt1)
 
        BindingSource = New BindingSource()
        BindingSource.DataSource = dv1
 
        DGV1Initialisieren()
 
        cmbAuswahlFuellen()
 
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub cmbAuswahlFuellen()
        With cmbAuswahl
            .Items.Add("Alle")
            .Items.Add("Gefundene")
            .Items.Add("Nicht gefundene")
        End With
    End Sub
 
    Private Sub DGV1Initialisieren()
 
        With DGV1
            .DataSource = BindingSource
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        End With
 
    End Sub
 
    Private Sub dt1Initialisieren()
 
        With dt1
            With dt1
                Dim IDCol As DataColumn = dt1.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Bauteil", Type.GetType("System.String"))
                .Columns.Add("Baudatum", Type.GetType("System.String"))
                .Columns.Add("Status", Type.GetType("System.String"))
 
                .TableName = "erbru"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dt1.Columns("ID")
        dt1.PrimaryKey = primaryKey
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: effeff
Datum: 09.06.17 10:19

 Private Sub DatenLaden(ByVal FileName As String)
 
dt1.Clear
 
        Dim sr As New System.IO.StreamReader(FileName)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
                newRow("Status") = ""
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
 
    Private Sub txtSeriennummer_TextChanged(sender As Object, e As EventArgs) _
      Handles txtSeriennummer.TextChanged
 
        If (Not txtSeriennummer.Text = "" Or Not txtSeriennummer.Text = _
          Nothing) And txtSeriennummer.Text.Length = 7 Then
            dv1.RowFilter = "Seriennummer LIKE '%" & txtSeriennummer.Text & "%'"
            For Each drv As DataRowView In dv1
                drv.Item(4) = "X"
            Next
            dt1.AcceptChanges()
        Else
            dv1.RowFilter = Nothing
        End If
 
    End Sub
 
    Private Sub cmbAuswahl_SelectedIndexChanged(sender As Object, e As _
      EventArgs) Handles cmbAuswahl.SelectedIndexChanged
        txtSeriennummer.Text = ""
 
        If cmbAuswahl.Text = "Alle" Then
            dv1.RowFilter = Nothing
            ToolStripStatusLabel1.Text = "Alle Datensätze: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Gefundene" Then
            dv1.RowFilter = "Status = 'X'"
            ToolStripStatusLabel1.Text = "Gefundene: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Nicht gefundene" Then
            dv1.RowFilter = "Status=''"
            ToolStripStatusLabel1.Text = "Nicht gefundene: " & dv1.Count
        End If
    End Sub
 
    Private Sub ExportToXML()
 
        Dim FileName As String = "erbru_" & Format(Now, "yyyyMMdd_hhmmss") & _
          ".xml"
 
        If Not System.IO.Directory.Exists(SavePath) Then
            System.IO.Directory.CreateDirectory(SavePath)
        End If
 
        With SaveFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = FileName
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = SaveFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            FileName = SaveFileDialog1.FileName
        End If
 
        dt1.WriteXml(FileName)
 
        ToolStripStatusLabel1.Text = "Die XML-Datei " & FileName & " wurde" & _
          "erstellt!"
 
    End Sub
 
    Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles _
      btnSpeichern.Click
        ExportToXML()
    End Sub
 
    Private Sub btnLaden_Click(sender As Object, e As EventArgs) Handles _
      btnLaden.Click
        LoadXML()
    End Sub
 
    Private Sub LoadXML()
 
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = ""
            '.Multiselect = True
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & _
              OpenFileDialog1.FileName
            Application.DoEvents()
            dt1.Clear()
            dt1.ReadXml(OpenFileDialog1.FileName)
        End If
 
        Me.Cursor = Cursors.Default
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub btnTextdateiLaden_Click(sender As Object, e As EventArgs) _
      Handles btnTextdateiLaden.Click
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "txt"
            .Filter = "TXT Dateien|*.txt"
            .FileName = ""
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & _
              OpenFileDialog1.FileName
            Application.DoEvents()
            DatenLaden(OpenFileDialog1.FileName)
        End If
    End Sub
End Class

EALA FREYA FRESENA

Beitrag wurde zuletzt am 09.06.17 um 10:21:43 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 09.06.17 11:02

Hallo effeff,

das sieht schon sehr Gut aus, ich konnte soweit auch deinen Code nachvollziehen funktioniert
auch da kann ich was mit anfangen.

du hast nun von Stufe gesprochen, nächste Stufe ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 09.06.17 12:37

Hallo effeff,

du bist ja schneller aber hätte auch gefragt, es bleibt ja nicht immer die gleiche Liste gleiche Bauteile
variabel sind die schon. Speichern etc. habe ich sauber übernommen funktioniert auch.

Teil 1, Teil 2: habe ich nachvollziehen können mit etwas Anlauf Schwierigkeiten aber jetzt läuft dein Stand bei mir auch.

Teil 3 soll was passieren? nicht falsch verstehen!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: effeff
Datum: 09.06.17 13:55

Was als nächstes passieren soll, musst DU mir sagen; Ich habe das gleiche Problem wie CAM-Andi, dass ich nicht ganz verstehen kann, worauf Du hinaus willst.

Verstanden habe ich: Du möchtest jetzt ein zweites DataGridView, in welches die gefundenen Daten übernommen werden können. Dort sollen zusätzlich die Spalten "Links" und "Rechts" eingefügt werden. Bei "Links" soll ein "X" stehen, wenn im ersten DataGridView bei diesem Datensatz auch bereits ein "X" eingetragen war.

So: Und jetzt erklär mir bitte ausführlich, wie Du gedacht hast, dass es in Wirklichkeit funktionieren soll...

Was man ansonsten noch machen kann, was Du bereits beschrieben hast, ist die Daten auszugeben. Dazu kann man z. B. den ReportViewer benutzen. Oder man strickt sich selber was in HTML und benutzt den Browser zur Azeige.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 09.06.17 14:33

Danke, deine Fragen muss ich zu einem späteren Zeitpunkt beantworten, Sorry.

Im moment bin ich damit beschäftigt, wie ich eine Nummer, nach der anderen finden könnte.
dazu habe ich mir mal einen Barcode Scanner angeschlossen und einiges an Label mit den Seriennummern kreiert.

ich möchte ja eine effektive schnelle Suche erreichen.

aber später mehr dazu.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 09.06.17 15:42

schauen wir erst mal ob diese Beschreibung verstanden wird.

Hallo effeff, hallo Andi

Antworten:

Teil-1, Teil-2

damit kann ich zunächst mal eine "Bestandskontrolle" durchführen

1. eine Kiste sortieren in Gut / Schlechteile Status "X" aus der Liste wurde in der Kiste aufgrund des Abgleichs Seriennummer gefunden
muss nun in eine "Schlechteile Kiste" nächste Seriennummer aus der Kiste mit der Liste abgleichen
nicht gefunden verbleibt in der Kiste, bis die Kiste sauber ist und dort keine weiteren Seriennummern aus der Liste vorhanden sind.

nun verbleiben in der Liste noch diverse Seriennummern die in der Kiste nicht vorhanden sind, ich muss weitersuchen also nächste Kiste.

2. gleiche Spiel jedoch in einer definierten Kiste diese hat nun aber eine Aufteilung in Links Rechts diese Kiste schimpfen wir mal Fahrgestellnummer a.) aus der Kiste Links (Seriennummer mit Liste vergleichen) Seriennummer gefunden Links in der Kiste = Schlecht
b.) aus der Kiste Rechts (Seriennummer mit Liste vergleichen) Seriennummer nicht gefunden Rechts in der Kiste = Gut
nun kommt die nächste Kiste und der Vorgang wiederholt sich.

ist es verständlicher?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: effeff
Datum: 09.06.17 17:19

OK...

Für die zweite Kiste ist es also so: Wird eine Seriennummer in einem der beiden Fächer gefunden, ist dieses Fach als schlecht zu bewerten. Wird die Seriennummer in einem der beiden Fächer nicht gefunden, ist dieser Zustand als OK zu bewerten. Richtig?

Weitere Sache: Haben die Kisten Namen oder Nummern? Musst Du dokumentieren, in welcher Kiste Du die Seriennummer gefunden hast?

Wie arbeitest Du denn überhaupt? Du greifst in eine Kiste hinein und willst dann überprüfen, ob Du die Seriennummer in dem Programm finden kannst?

Für die Kisten mit nur einem Fach: Bisher wird ein Fund mit einem "X" markiert. Soll auch hier eine Unterscheidung nach "schlecht" stattfinden?

Hier findet nun eigentlich eine Datentrennung statt. Da Einzelkisten kein linkes und rechtes Fach haben, sollten die Daten relational betrachtet werden. Eine andere Sache ist es, die Daten relativ zu betrachten. Das beinhaltet, eine gewisse Logik zu verstehen.

1. Es gibt Kisten, die sich in Einzelkisten oder Zweierkisten unterscheiden. Es sollte eine zusätzliche Spalte in der DataTable enthalten sein, um Einzel- oder Zweierkisten zu unterscheiden (wichtig für 4.).
2. Ein Fund kann nur in einer Einzelkiste oder in einem der beiden Fächer der Zweierkiste enthalten sein.
3. Unter "Status" im bisherigen Programm brauche ich nur zu dokumentieren, ob der Fund aus einer Einzelkiste, aus einem linken Fach oder aus einem rechten Fach stammt.
-> Ist der Fund mit einem "X" markiert, ist es zwangsläufig eine Einzelkiste.
-> Ist der Fund mit "links" markiert, stammt der Fund aus einer Zweierkiste aus dem linken Fach.
-> Ist der Fund mit "rechts" markiert, stammt der Fund aus einer Zweierkiste aus dem rechten Fach.
4. Wenn die Kisten einen Namen oder eine Nummer haben, kannst Du, wenn Du diese Angabe mit in die DataTable aufnimmst, eine astreine Statistik machen. Du kannst erkennen, ob die Kiste mit einem bestimmten Namen oder einer bestimmten Nummer eine Einzelkiste ist und wieviele Funde Du darin getätigt hast. Du kannst erkennen, ob es eine Doppelkiste ist und wieviele Funde "links" oder "rechts" getätigt wurden. Du kannst alle Einzelkisten auszählen und wieviele Funde darin waren. Du kannst alle Zweierkisten auszählen und die Angaben nach "links" oder "rechts" auswählen.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 09.06.17 18:15

Hallo effeff,

ich denke jetzt hast du mein begehren verstanden Super!

das mit den Kisten war jetzt nur zum besseren Erklärung aber vergleichbar mit der Realität.

Haben die Kisten Namen oder Nummern? Ja = Fahrgestellnummer(123456 stellig) aber immer eindeutig
Musst Du dokumentieren, in welcher Kiste Du die Seriennummer gefunden hast? Ja

Wie arbeitest Du denn überhaupt?
Du greifst in eine Kiste hinein und willst dann überprüfen, ob Du die Seriennummer in dem Programm finden kannst? Ja im Prinzip Richtig, ich schaue und notiere die Seriennummer und suche im Programm.

jetzt wird ein Schuh draus gelle?

und zu deinem 4. Genau was mir helfen kann um einen ordentlichen Gesamtbericht der Prüfung abzugeben.
und deine Anmerkung: Du kannst alle Einzelkisten auszählen... auf den Kopf getroffen genau so da das dann der eigentliche Prüfumfang wäre nicht das Programm die haben sich sozusagen irgendwo versteckt.

dann machen wir das zusammen weiter?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 10.06.17 18:19

Hallo effeff,

bist du Online?

ich habe mich bis jetzt nicht wieder gemeldet weil ich mir die Drucken Funktion erstellt habe
Puh alles manuell kein "Report Ersteller" ist halt eine brauchbare Liste.

geht es denn nun weiter mit Teil 3?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 11.06.17 12:18

Hallo effeff,

ich habe mir dein Konzept noch mal angeschaut:
1. Es gibt Kisten, die sich in Einzelkisten oder Zweierkisten unterscheiden. Es sollte eine zusätzliche Spalte in der DataTable enthalten sein, um Einzel- oder Zweierkisten zu unterscheiden (wichtig für 4.).
2. Ein Fund kann nur in einer Einzelkiste oder in einem der beiden Fächer der Zweierkiste enthalten sein.
3. Unter "Status" im bisherigen Programm brauche ich nur zu dokumentieren, ob der Fund aus einer Einzelkiste, aus einem linken Fach oder aus einem rechten Fach stammt.
-> Ist der Fund mit einem "X" markiert, ist es zwangsläufig eine Einzelkiste.bzw. Lagerbestand
-> Ist der Fund mit "links" markiert, stammt der Fund aus einer Zweierkiste bzw.Fahrgestellnummer linke Seite.
-> Ist der Fund mit "rechts" markiert, stammt der Fund aus einer Zweierkistebzw.Fahrgestellnummerrechte Seite.
4. Wenn die Kisten einen Namen oder eine Nummer haben, kannst Du, wenn Du diese Angabe mit in die DataTable aufnimmst, eine astreine Statistik machen. Du kannst erkennen, ob die Kiste mit einem bestimmten Namen oder einer bestimmten Nummer eine Einzelkiste ist und wieviele Funde Du darin getätigt hast. Du kannst erkennen, ob es eine Doppelkiste ist und wieviele Funde "links" oder "rechts" getätigt wurden. Du kannst alle Einzelkisten auszählen und wieviele Funde darin waren. Du kannst alle Zweierkisten bzw.Fahrgestellnummern auszählen und die Angaben nach "links" oder "rechts" auswählen.
Ergänzung
5. wenn kein Fund in Zweierkiste bzw. Fahrgestellnummer dann?

nun möchte ich es mit dir umsetzen, ist das OK? und ist es möglich im Programm dann die korekten Funde Übersichtlich mit Zahlen zu dokumentieren, das ist das a und o

Lagerbestand Prüfumfang von 500 50 in Liste gefunden.
Fahrgestellnummer Prüfumfang von 35 15 in Liste gefunden.
Liste alle 65 Seriennummern gefunden,Suche beendet?

verstehst wo ich hin möchte?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: effeff
Datum: 12.06.17 14:15

OK. Die Art und Weise der Eingabe der Daten über eine TextBox ist hier dann zu umständlich. Es wäre sinnvoller, eine Eingabemaske zu benutzen. Damit könntest Du ZUERST eine Liste aller gefundenen Teile mit ihrem Fundort (Einzelkiste, linkes Fach oder rechtes) erzeugen und diese dann am Schluss mit Deinen Listen abgleichen lassen, um eine Ergebnisliste zu erzeugen. Dabei macht es dann Sinn, herauszufinden, WOHER Deine Daten kommen. Bisher hast Du angegeben, dass es sich um eine Textdatei handelt.

Handelt es sich um eine einzige Textdatei mit den Daten oder sind es mehrere Textdateien mit den Daten? Wenn es mehrere Textdateien mit den Daten sind, könntest Du z. B. erst einmal eine Gesamtliste daraus erstellen und dann munter Deine Eingaben tätigen, um die Daten miteinander vergleichen zu können.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: ERBRU
Datum: 12.06.17 14:58

erst einmal Danke für deine Rückmeldung, klingt erst mal Gut das mit der Eingabemaske.

zu deiner Frage:
Handelt es sich um eine einzige Textdatei mit den Daten oder sind es mehrere Textdateien mit den Daten? Wenn es mehrere Textdateien mit den Daten sind, könntest Du z. B. erst einmal eine Gesamtliste daraus erstellen und dann munter Deine Eingaben tätigen, um die Daten miteinander vergleichen zu können.

es kann sein da dies "Neu" ist eine oder gar mehrere Listen kommen. Ich gehe erst mal von einer aus.

wir könnten also im Prinzip schauen wie das mit der Eingabemaske aussehen könnte?

ich habe ja deinen Teil-1 Teil-2 bereits in eine Anwendung die auch funktioniert geschrieben.

würde mich freuen von dir zu hören bzgl. Eingabemaske
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2: 
Autor: effeff
Datum: 12.06.17 16:51

Nochmals eine Nachfrage: Es gibt EINE einzige Textdatei mit Daten. Anhand der Seriennummer können diese Daten entweder in einer Einzelkiste ODER in einer Mehrfachkiste ODER gar nicht gefunden werden, richtig?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Suchen und Markieren nach DGV2 übergeben, Teil 1 vom 12.06.2017: 
Autor: effeff
Datum: 12.06.17 17:04

OK! Ich gehe davon aus, dass Du eine Liste hast und prüfst, ob das Material in einer Einzel- oder einer Mehrfachkiste ist. Zum Programm ist ein Button "btnSuchen" mit der Beschriftung "Suchen" dazu gekommen; Ferner wurde es um eine ComboBox "cmbKistenart" erweitert. Hier folgt wieder der erste Teil:
Public Class Form1
 
    Dim dt1 As New DataTable
    Dim dv1 As DataView
    Dim BindingSource As BindingSource
    Dim SavePath As String = Environment.GetEnvironmentVariable("appdata") & _
      "\erbru"
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Me.Text = "erbrus Inventurprogramm:"
 
        dt1Initialisieren()
 
        dv1 = New DataView(dt1)
 
        BindingSource = New BindingSource()
        BindingSource.DataSource = dv1
 
        DGV1Initialisieren()
 
        cmbAuswahlFuellen()
        cmbKistenartFuellen()
 
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub cmbKistenartFuellen()
        With cmbKistenart
            .Items.Add("Keine Auswahl")
            .Items.Add("Einzelkiste")
            .Items.Add("Mehrfachkiste Links")
            .Items.Add("Mehrfachkiste Rechts")
        End With
    End Sub
 
    Private Sub cmbAuswahlFuellen()
        With cmbAuswahl
            .Items.Add("Alle")
            .Items.Add("Gefundene")
            .Items.Add("Nicht gefundene")
        End With
    End Sub
 
    Private Sub DGV1Initialisieren()
 
        With DGV1
            .DataSource = BindingSource
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        End With
 
    End Sub
 
    Private Sub dt1Initialisieren()
 
        With dt1
            With dt1
                Dim IDCol As DataColumn = dt1.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Bauteil", Type.GetType("System.String"))
                .Columns.Add("Baudatum", Type.GetType("System.String"))
                .Columns.Add("Status", Type.GetType("System.String"))
 
                .TableName = "erbru"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dt1.Columns("ID")
        dt1.PrimaryKey = primaryKey
 
    End Sub
 
    Private Sub DatenLaden(ByVal FileName As String)
 
 
        dt1.Clear()
 
        Dim sr As New System.IO.StreamReader(FileName)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
                newRow("Status") = ""
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
 
    Private Sub cmbAuswahl_SelectedIndexChanged(sender As Object, e As _
      EventArgs) Handles cmbAuswahl.SelectedIndexChanged
        txtSeriennummer.Text = ""
 
        If cmbAuswahl.Text = "Alle" Then
            dv1.RowFilter = Nothing
            ToolStripStatusLabel1.Text = "Alle Datensätze: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Gefundene" Then
            dv1.RowFilter = "Status <> ''"
            ToolStripStatusLabel1.Text = "Gefundene: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Nicht gefundene" Then
            dv1.RowFilter = "Status=''"
            ToolStripStatusLabel1.Text = "Nicht gefundene: " & dv1.Count
        End If
    End Sub
 
    Private Sub ExportToXML()
 
        Dim FileName As String = "erbru_" & Format(Now, "yyyyMMdd_hhmmss") & _
          ".xml"
 
        If Not System.IO.Directory.Exists(SavePath) Then
            System.IO.Directory.CreateDirectory(SavePath)
        End If
 
        With SaveFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = FileName
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = SaveFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            FileName = SaveFileDialog1.FileName
        End If
 
        dt1.WriteXml(FileName)
 
        ToolStripStatusLabel1.Text = "Die XML-Datei " & FileName & " wurde" & _
          "erstellt!"
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Suchen und Markieren nach DGV2 übergeben, Teil 2 vom 12.06.2017: 
Autor: effeff
Datum: 12.06.17 17:04

Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles _
  btnSpeichern.Click
        ExportToXML()
    End Sub
 
    Private Sub btnLaden_Click(sender As Object, e As EventArgs) Handles _
      btnLaden.Click
        LoadXML()
    End Sub
 
    Private Sub LoadXML()
 
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = ""
            '.Multiselect = True
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            FileName = OpenFileDialog1.FileName
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & FileName
            Application.DoEvents()
            dt1.Clear()
            dt1.ReadXml(OpenFileDialog1.FileName)
        End If
 
        Me.Cursor = Cursors.Default
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub btnTextdateiLaden_Click(sender As Object, e As EventArgs) _
      Handles btnTextdateiLaden.Click
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "txt"
            .Filter = "TXT Dateien|*.txt"
            .FileName = ""
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & _
              OpenFileDialog1.FileName
            Application.DoEvents()
            DatenLaden(OpenFileDialog1.FileName)
            Me.Cursor = Cursors.Default
            Application.DoEvents()
        End If
 
    End Sub
 
    Private Sub btnSuchen_Click(sender As Object, e As EventArgs) Handles _
      btnSuchen.Click
 
        If dt1.Rows.Count = 0 Then
            MessageBox.Show("Du kannst nix suchen! Die Tabelle enthält keine" & _
              "Daten!", "Sirianische Planetenkontrolle:")
            Exit Sub
        End If
 
        If cmbKistenart.Text = "" Then
            MessageBox.Show("Du musst erst die Abfrage zur Kistenart" & _
              "beantworten!")
            Exit Sub
        End If
 
        Dim foundrows() As DataRow
 
        If txtSeriennummer.Text.Length = 7 Then
            foundrows = dt1.Select("Seriennummer='" & txtSeriennummer.Text & _
              "'")
 
            If foundrows.Count > 1 Then
                MessageBox.Show("Diese Seriennummer existiert mehrfach!")
                Exit Sub
            End If
 
            foundrows(0).Item("Status") = cmbKistenart.Text
            txtSeriennummer.Text = ""
            cmbKistenart.Text = ""
 
        End If
 
    End Sub
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Die Arbeitsweise... 
Autor: effeff
Datum: 12.06.17 17:11

Du kannst die Daten direkt aus einer Textdatei laden. Wenn Du Daten bearbeitet hast, kannst Du die Daten in einer XML-Datei speichern und diese hinterher dann auch wieder aufrufen und weiter bearbeiten.

Wenn Du die Daten geladen hast (am Anfang aus der Textdatei) oder hinterher aus einer XML, kannst Du Daten suchen und das Ergebnis eintragen lassen - wenn gefunden. Dabei trägst Du in die TextBox die Seriennummer ein und wählst aus der ComboBox "cmbKistenart" aus, ob es sich um eine Einzelkiste handelt oder ob Du die Seriennummer aus einer Mehrfachkiste aus dem linken oder rechten Fach hast. Dann klickst Du auf den Button "btnSuchen". Wird der Datensatz gefunden, wird unter Status eingetragen, ob es sich um eine "Einzelkiste" handelt oder um "Mehrfachkiste links" oder "Mehrfachkiste rechts". Die Markierung "X" ist entfallen, da der Eintrag "Einzelkiste" nun einmal viel deutlicher ist.

Ich wäre jetzt sehr an Deiner Drucken-Funktion interessiert. Wie hast Du die eingebaut?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Die Arbeitsweise... 
Autor: ERBRU
Datum: 12.06.17 18:30

Hallo effeff,
habe das nun soweit nachgebaut und die Arbeitsweise soweit verstanden nur wenn man es auswählt wird der Status eingetragen, irgendwas fehlt mir noch zBsp. das dokumentieren der Fahrgestellnummer wenn Links oder Rechts gefunden...

aber OK später vieleicht.

Ich wäre jetzt sehr an Deiner Drucken-Funktion interessiert. Wie hast Du die eingebaut?
hier erst mal Teil 1, melde dich ob es dir soweit gelungen ist dann Teil 2 evtl. sogar Teil 3
wegen der begrenzten Zeilen hier.

es funktioniert aber ist ja getestet

1. Füge eine Neue Form hinzu Form2 auf der brauchst du eine ComboBox und 2 Buttons und diesen kurzen
    Public Class Form2
    Public return_wert As Boolean
    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles _
      btnOK.Click
        return_wert = True : Me.Close()
    End Sub
 
    Private Sub btnAbbrechen_Click(sender As Object, e As EventArgs) Handles _
      btnAbbrechen.Click
        return_wert = False : Me.Close()
    End Sub
    End Class
damit wählen wir dann einen Drucker aus.
2. Füge in Form1 einen Button btndrucken ein "Text= Liste drucken"
der Import ist in Form1 erforderlich
Imports System.Drawing.Printing
3. nun brauchen wir eine Menge Code als erstes Variablen:

'Druck Variablen
    Private WithEvents PD As New Printing.PrintDocument
    Private PV As New PrintPreviewDialog
    '---
    Private PPD As New PrintPreviewDialog
    Private DGV As DataGridView
 
    Private Vorgabe_Druckername As String
 
    Private SpaltenBreiten As New List(Of Single)   'Auflistung mit der Breite 
    ' der einzelnen Spalten
    Private ZeilenHoehen As New List(Of Integer)    'Auflistung mit der Höhe 
    ' der einzelnen Zeilen
 
    Private xSpaltenBreiten As New List(Of Double)   'Auflistung mit der Breite 
    ' der einzelnen Spalten
    Private xZeilenHoehen As New List(Of Double)    'Auflistung mit der Höhe 
    ' der einzelnen Zeilen
 
    Private DruckSeite As Integer
    Private DruckSpalte As Integer
    Private DruckZeile As Integer
    Private DGVSpaltenIndex As Integer
    Private DGVZeilenIndex As Integer
    Private rect_Druckbereich As New RectangleF
 
 
    Private DatenAbruf As String
    Dim mRow As Integer = 0
    Dim newpage As Boolean = True
    ' ---> Druckmethode testen
    Public HeaderColor As System.Drawing.Color = Color.LightGray
    Public RowColor As System.Drawing.Color = Color.White
    Public RowColorAlternate As System.Drawing.Color = Color.LightYellow
    Public HZentrieren As Boolean = True
    Public DruckeGitternetzlinien As Boolean = True
    Public SpaltenAutoSize As Boolean = False
da kommt noch mehr damit können wir noch nicht drucken
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Die Arbeitsweise... 
Autor: ERBRU
Datum: 12.06.17 18:54

Ich wäre jetzt sehr an Deiner Drucken-Funktion interessiert. Wie hast Du die eingebaut?
Teil 2
'für die Druckerauswahl wird noch diese Funktion benötigt, um die Form2 aufzurufen
 Private Function Druckerauswahl(ByVal PD As Printing.PrintDocument) As Boolean
        Using Dialog_Form As New Form2()
            With Dialog_Form
                .ShowInTaskbar = True
                For Each str_Drucker In _
                  Printing.PrinterSettings.InstalledPrinters
                    .ComboBox1.Items.Add(str_Drucker)
                Next
                .ComboBox1.SelectedIndex = .ComboBox1.FindString( _
                  PD.PrinterSettings.PrinterName)
                .ShowDialog(Me)
                Vorgabe_Druckername = .ComboBox1.SelectedItem.ToString
            End With
 
            Return Dialog_Form.return_wert
        End Using
    End Function
nun brauchen wir noch etwas für die Seiteneinstellung, Druckbereich festlegen:
  Private Sub PrintDoc_Prefs(ByVal PD As Printing.PrintDocument, ByVal _
    Querformat As Boolean)
        Dim PageWidth, PageHeight As Decimal
 
        With PD.DefaultPageSettings
            'Druckausrichtung
            .Landscape = Querformat
 
            'Ränder setzen
            With .Margins()
                If Querformat Then
                    .Bottom = 20 : .Top = 50 : .Left = 20 : .Right = 20
                Else
                    .Bottom = 20 : .Top = 50 : .Left = 50 : .Right = 10
                End If
            End With
 
            PageWidth = .Bounds.Width - (.Margins.Left + .Margins.Right)     ' 
            ' Druckbereich Breite
            PageHeight = .Bounds.Height - (.Margins.Top + .Margins.Bottom)   ' 
            ' Druckbereich Höhe
 
            rect_Druckbereich.X = .Margins.Left ' Druckbereich Links
            rect_Druckbereich.Y = .Margins.Top ' Druckbereich Rechts
 
            rect_Druckbereich.Width = PageWidth - 50
            rect_Druckbereich.Height = PageHeight - 20
        End With
    End Sub
dann der Button btndrucken, der die Prozedur dann abläuft
 'Liste drucken
    Private Sub btndrucken_Click(sender As Object, e As EventArgs) Handles _
      btndrucken.Click
        If DGV1.Rows.Count = 0 Then
            MessageBox.Show("Es sind keine Daten vorhanden.", "Abbruch")
            Return
        End If
 
        DatenAbruf = Format(Now, "dd.MM.yyyy HH:mm:ss")
        erbru_liste_drucken()
    End Sub
 
    Public Sub erbru_liste_drucken()
        If Not Druckerauswahl(PD) Then Return
        DGV = DGV1
        PPD.Document = PD
        PD.DocumentName = "erbru-Liste: " & Format(Now, "ddMMyyyy HH:mm:ss")
        PD.PrinterSettings.PrinterName = Vorgabe_Druckername
        PrintDoc_Prefs(PD, False)
        PD_OB_Zeilen_Spalten_Ermitteln()
        DirectCast(PPD, Form).WindowState = FormWindowState.Maximized
        PPD.PrintPreviewControl.StartPage = 0
        PPD.ShowDialog()
    End Sub
dieser Teil PD_OB_Zeilen_Spalten_Ermitteln() folgt noch und das Printpage
ohne geht es auch noch nicht da die Prozeduren noch bei dir fehlen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Die Arbeitsweise... 
Autor: ERBRU
Datum: 12.06.17 18:59

Ich wäre jetzt sehr an Deiner Drucken-Funktion interessiert. Wie hast Du die eingebaut?
Teil 3, so wenn das hier alles reinpasst und du es umgesetzt hast sollte es funktioniern. Bei mir klappt das.

der Rest folgt das ist ein langer code, den letzten Post setzt du unter diesem.

 'Spalten Zeilen einrichten
    Private Sub PD_OB_Zeilen_Spalten_Ermitteln()
        Dim ImageWall As Bitmap
        ImageWall = New Bitmap(CInt(rect_Druckbereich.Width), CInt( _
          rect_Druckbereich.Height))
 
        Using g As Graphics = Graphics.FromImage(ImageWall)
            g.PageUnit = GraphicsUnit.Display
            DruckSeite = 1
 
            Dim DGV_Font As Font = New System.Drawing.Font("Tahoma", 10.25!, _
              System.Drawing.FontStyle.Regular, _
              System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Dim Status_Font As Font = New System.Drawing.Font("Wingdings", _
            12.25!, System.Drawing.FontStyle.Regular, _
            System.Drawing.GraphicsUnit.Point, CType(2, Byte))
            Dim CellColor As System.Drawing.Color = Color.DarkRed
 
            Dim ZellInhalt As String
            Dim Höhe As Integer = 0
            Dim maxHöhe As Integer = 0
            Dim Breite As Single = rect_Druckbereich.Width
 
            ZeilenHoehen.Clear()
            SpaltenBreiten.Clear()
 
            'relativ feste Breiten
            Dim w1 As Single = g.MeasureString("-9.999.999-", DGV_Font).Width _
              'ID
            Dim w2 As Single = g.MeasureString("-Seriennummer-", _
            DGV_Font).Width 'Seriennummer
            Dim w3 As Single = g.MeasureString("-9.999.999,99--9.999.999,99-", _
            DGV_Font).Width 'Bauteil
            Dim w4 As Single = g.MeasureString("-9.999.999,99--9.999.999,99-", _
            DGV_Font).Width 'Fertigungsdatum-Bauteil
            Dim w5 As Single = g.MeasureString("-Mehrfachkiste Links-", _
            DGV_Font).Width 'Status
 
            Dim wG As Single = w1 + w2 + w3 + w4 + w5
            Dim PrzSatz As Single = (wG / Breite) * 100
 
            'Spaltenbreiten dritteln wenn erforderlich
            Dim halberPrzSatz As Single = (100 - PrzSatz) / 2
            Dim halbeBreite As Single = (halberPrzSatz * Breite) / 100
 
            SpaltenBreiten.Add(w1) 'ID
            SpaltenBreiten.Add(w2) 'Seriennummer
            SpaltenBreiten.Add(w3) 'Bauteil
            SpaltenBreiten.Add(w4) 'Fertigungsdatum
            SpaltenBreiten.Add(w5) 'Status
 
            Dim curr_Zelle As DataGridViewCell = Nothing
            Dim ZellBox As New RectangleF
            Dim sfmt As New StringFormat
 
            sfmt = StringFormat.GenericDefault
            sfmt.Alignment = StringAlignment.Center
            sfmt.LineAlignment = StringAlignment.Center
 
            Dim ZeilenHöhe As Single = g.MeasureString("[Wü gq*µ']", _
              DGV_Font).Height
            Dim ZeilenHöheB As Single = g.MeasureString("ü", Status_Font).Height
 
            Dim charactersFitted, linesFilled As Integer
            Dim tmp_size As New SizeF
            Dim gsize As New SizeF
            Dim aktHöhe As Integer
 
            For DGVZeile As Integer = 0 To (DGV.Rows.Count - 1)
                maxHöhe = 0
                Höhe = 0
 
                For DGVSpalte As Integer = 0 To (DGV.Columns.Count - 1)
                    curr_Zelle = DGV.Rows(DGVZeile).Cells(DGVSpalte)
 
                    ZellInhalt = curr_Zelle.FormattedValue.ToString
                    'Höhenmessung
                    tmp_size.Width = SpaltenBreiten(DGVSpalte) - 1
                    tmp_size.Height = rect_Druckbereich.Height
 
                    'Anzahl benötigter Zeilen ermitteln (linesFilled)
                    gsize = g.MeasureString(ZellInhalt, DGV_Font, tmp_size, _
                      sfmt, charactersFitted, linesFilled)
                    aktHöhe = CInt(Math.Ceiling((ZeilenHöhe * linesFilled)))
 
                    Höhe = Math.Max(Höhe, aktHöhe)
                    maxHöhe = Math.Max(Höhe, maxHöhe)
                Next
 
                ZeilenHoehen.Add(maxHöhe + 2)
            Next
 
            DGV_Font.Dispose()
            Status_Font.Dispose()
            sfmt.Dispose()
            curr_Zelle.Dispose()
 
        End Using
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Die Arbeitsweise... 
Autor: ERBRU
Datum: 12.06.17 19:05

doch noch zu groß

    Private Sub PD_BeginPrint(ByVal sender As Object, ByVal e As _
      Printing.PrintEventArgs) Handles PD.BeginPrint
        DruckSeite = 0
    End Sub
    Private Sub PD_PrintPage(ByVal sender As Object, ByVal e As _
      PrintPageEventArgs) Handles PD.PrintPage
        DruckSeite += 1
 
        Dim ZellBox As New RectangleF
        Dim sf As StringFormat = StringFormat.GenericTypographic
 
        Dim MaxZeilenIndex, MaxSpaltenIndex As Integer
        Dim PosX, PosY, TextHöhe As Single
 
        Dim ZellInhalt As String = String.Empty
 
        Dim Titel_Font As Font = New System.Drawing.Font("Tahoma", 10.25!, _
          System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
          CType(0, Byte))
        Dim Titel_FontK As Font = New System.Drawing.Font("Tahoma", 8.25!, _
        System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
        CType(0, Byte))
        Dim DGV_Font As Font = New System.Drawing.Font("Tahoma", 8.25!, _
        System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
        CType(0, Byte))
        Dim DGV_Font_K As Font = New System.Drawing.Font("Arial Narrow", 8.25!, _
        System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
        CType(0, Byte))
 
        Dim Status_Font As Font = New System.Drawing.Font("Wingdings", 12.25!, _
          System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
          CType(2, Byte))
 
        Dim HeaderColor As System.Drawing.Color = Color.LightGray
 
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.TextRenderingHint = _
          System.Drawing.Text.TextRenderingHint.AntiAlias
        e.Graphics.PageUnit = GraphicsUnit.Display
 
        PosY = rect_Druckbereich.Top
        PosX = rect_Druckbereich.Left
        TextHöhe = e.Graphics.MeasureString("[Bg", Titel_Font).Height  ' 
        ' Mustertext zur Ermittlung der Schrifthöhe
 
        ZellBox = New RectangleF(rect_Druckbereich.Left, rect_Druckbereich.Top, _
          rect_Druckbereich.Width, TextHöhe)
 
        'Titel & Druckdatum & Seite
        If DruckSeite = 1 Then
            sf.Alignment = StringAlignment.Near
            sf.LineAlignment = StringAlignment.Far
            e.Graphics.DrawString(String.Concat("erbru-übersicht"), Titel_Font, _
              Brushes.Black, ZellBox, sf)
        End If
        If DruckSeite >= 1 Then
            sf.Alignment = StringAlignment.Center
            sf.LineAlignment = StringAlignment.Far
            e.Graphics.DrawString(String.Concat("erbru-Status: ", DatenAbruf), _
              Titel_FontK, Brushes.Black, ZellBox, sf)
 
            sf.Alignment = StringAlignment.Far
            sf.LineAlignment = StringAlignment.Far
            e.Graphics.DrawString("Seite: " & DruckSeite, DGV_Font, _
              Brushes.Black, ZellBox, sf)
        End If
 
 
        PosX = rect_Druckbereich.Left
        PosY += ZellBox.Height + 6
 
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
 
        'Spaltenköpfe drucken
        DruckSpalte = 0
        TextHöhe = e.Graphics.MeasureString("[Bg", DGV_Font).Height + 3 ' 
        ' Mustertext zur Ermittlung der Schrifthöhe
 
        Dim lst_Header As New List(Of String) From {"ID", "Seriennummer", _
          "Bauteil", "Baudatum", "Status"}
 
        'Den höchsten ZeilenIndex und SpaltenIndex der Datensätze ermitteln
        MaxZeilenIndex = ZeilenHoehen.Count - 1
        MaxSpaltenIndex = lst_Header.Count - 1
 
den Rest den ich noch sende bitte ab hier anhängen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 12.06.17 19:07

Rest zum anhängen:
hoffe das es klappt
  For i = 0 To (lst_Header.Count - 1)
            ZellBox = New RectangleF(PosX, PosY, SpaltenBreiten(i), TextHöhe)
            ZellInhalt = lst_Header.Item(i)
            e.Graphics.FillRectangle(New SolidBrush(HeaderColor), ZellBox) _
              'Zelle ausfüllen
            e.Graphics.DrawRectangle(Pens.Black, ZellBox.X, ZellBox.Y, _
            ZellBox.Width, ZellBox.Height) 'DruckerGitternetzlinien
            e.Graphics.DrawString(ZellInhalt, DGV_Font, Brushes.Black, ZellBox, _
            sf) 'Spaltentext
            PosX += SpaltenBreiten(i)
        Next
        'Zeileninhalte drucken
        Dim nächste_TextHöhe As Single 'Texthöhe des nächsten Datensatzes
        Dim curr_Zelle As DataGridViewCell = Nothing
 
        Dim pen_dünn As New Pen(Brushes.Black)
        pen_dünn.Width = 0.2F
 
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
 
        DruckZeile = 0
        PosX = rect_Druckbereich.Left
        PosY += ZellBox.Height
 
        Dim Schreibbox As New RectangleF
 
        Do
            DruckSpalte = 0
            TextHöhe = ZeilenHoehen(DruckZeile + DGVZeilenIndex)
 
            'Gesamtlisten-Ende
            If ((DruckZeile + DGVZeilenIndex) < (MaxZeilenIndex)) Then
                nächste_TextHöhe = ZeilenHoehen(DruckZeile + DGVZeilenIndex + 1)
                If ((rect_Druckbereich.Height + rect_Druckbereich.Top) < (PosY _
                  + TextHöhe) + 1) Then
                    Exit Do
                End If
            End If
 
            Do
                curr_Zelle = DGV.Rows(DruckZeile + DGVZeilenIndex).Cells( _
                  DruckSpalte)
                ZellInhalt = curr_Zelle.FormattedValue.ToString
 
                ZellBox = New RectangleF(PosX, PosY, SpaltenBreiten( _
                  DruckSpalte), TextHöhe)
                Schreibbox = New RectangleF(ZellBox.X + 4, ZellBox.Y, _
                ZellBox.Width - 8, ZellBox.Height)
 
                'Beg: DruckerGitternetzlinien nur Äusserer Rahmen
                e.Graphics.DrawLine(pen_dünn, ZellBox.X, ZellBox.Y + _
                  ZellBox.Height, ZellBox.X + ZellBox.Width, ZellBox.Y + _
                  ZellBox.Height)
                If DruckSpalte = 0 Then
                    e.Graphics.DrawLine(pen_dünn, PosX, PosY, PosX, PosY + _
                      ZellBox.Height)
                ElseIf DruckSpalte = 4 Then
                    e.Graphics.DrawLine(pen_dünn, ZellBox.X + ZellBox.Width, _
                      PosY, ZellBox.X + ZellBox.Width, PosY + ZellBox.Height)
                End If
                'End: DruckerGitternetzlinien
 
                'Textausrichtung je nach Spalte
 
                If DruckSpalte = 1 Or DruckSpalte = 2 Or DruckSpalte = 3 Or _
                  DruckSpalte = 4 Then
                    sf.Alignment = StringAlignment.Center
                Else
                    sf.Alignment = StringAlignment.Near
                End If
 
                e.Graphics.DrawString(ZellInhalt, DGV_Font, Brushes.Black, _
                  Schreibbox, sf)
 
                PosX += SpaltenBreiten(DruckSpalte)
                DruckSpalte += 1
 
            Loop Until (DruckSpalte > MaxSpaltenIndex)
 
            PosX = rect_Druckbereich.Left
            PosY += TextHöhe
 
            DruckZeile += 1
 
            If ((DruckZeile + DGVZeilenIndex) > (MaxZeilenIndex)) Then
                Exit Do
            End If
        Loop
 
        'Status
        If (DruckZeile + DGVZeilenIndex) > (MaxZeilenIndex) Then
            e.HasMorePages = False
            DGVZeilenIndex = 0
            DruckSpalte = 0
            DruckZeile = 0
            DruckSeite = 0
 
            'Aufräumen
            lst_Header.Clear()
            pen_dünn.Dispose()
            sf.Dispose()
            Titel_Font.Dispose()
            Titel_FontK.Dispose()
            DGV_Font.Dispose()
            curr_Zelle.Dispose()
            e.Graphics.Dispose()
            Exit Sub
        Else
            e.HasMorePages = True
            DGVZeilenIndex = DruckZeile + DGVZeilenIndex
 
            'Aufräumen
            lst_Header.Clear()
            pen_dünn.Dispose()
            sf.Dispose()
            Titel_Font.Dispose()
            Titel_FontK.Dispose()
            DGV_Font.Dispose()
            curr_Zelle.Dispose()
            e.Graphics.Dispose()
            Exit Sub
        End If
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Die Arbeitsweise... 
Autor: ERBRU
Datum: 12.06.17 19:10

effeff schrieb:
Zitat:


Ich wäre jetzt sehr an Deiner Drucken-Funktion interessiert.
Wie hast Du die eingebaut?


oh man mir ist ein dummer Fehler unterlaufen, wollte dir antworten und habe wieder mir selbst geantwortet, die sind aber für dich. Da ist der Code drucken drin aufgeteilt. Probier mal sonst brauche ich deine E-Mail für einmal komplett.

erbru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2 vom 12.06.2017: 
Autor: ERBRU
Datum: 12.06.17 19:57

oh oh, effeff bist du noch erreichbar?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2 vom 12.06.2017: 
Autor: effeff
Datum: 12.06.17 23:10

Doch, natürlich bin ich noch erreichbar; Zwischendurch erlaube ich mir nur ab und zu, was anderes zu machen, als vor dem Rechner zu hängen; Da draußen gibt es auch noch eine reale Welt, aber pssst...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2 vom 12.06.2017: 
Autor: ERBRU
Datum: 13.06.17 06:10

da haste natürlich Recht, ich möchte aber dieses Programm nutzen dazu muss es natprlich zuverlässig funktionieren.

1. drucken bei dir funktioniert? habe bei mir die Form2 FormBorderStyle auf FixedDialog eingestellt
und ControlBox False gesetzt
2. Wichtig wie könnte man nun die Fahrgestellnummer mit einbauen? für die Mehrfachkiste Links
Mehrfachkiste Rechts ist das relevant die "Kiste" später zu identifizieren muss ja was Gutes rein.
3. Eine Auswertung / Auszählung ist auch erforderlich das man die Liste nicht noch manuell
durch zählen muss.

ich hatte das in der Vorgängerversion so probiert, hat mir das "X" auch korrekt gezählt.

 'Auswertung
    Public Sub GetError_Auswertung()
        If dt1.Rows.Count = 0 Then Return
        Dim Zeichen As String = "X"
        'Anzahl gefundene
        Dim aCount = _
            (From row In dt1.Rows _
             Select row Where row("Status").ToString = Zeichen).Count
        'Anzahl nicht gefundene
        Dim bCount = _
            (From row In dt1.Rows _
             Select row Where row("Status").ToString <> Zeichen).Count
 
        Dim anzahl As Integer = aCount
        Dim _anzahl As Integer = bCount
        'Anzahl gefundene
        TextBox1.Text = anzahl.ToString
        'Anzahl nicht gefundene
        TextBox2.Text = _anzahl.ToString
        'Anzahl Datensätze
        TextBox3.Text = dt1.Rows.Count
        'Anzahl noch finden
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben, Teil 2 vom 12.06.2017: 
Autor: effeff
Datum: 13.06.17 09:14

Eine Fahrgestellnummer einzubauen bedeutet doch nur, ein zusätzliches Feld mit in die DataTable aufzunehmen. Die Grundlagen sind ja bereits da und müssen nur angepasst werden. Und Auflisten kannst Du mit der DataTable.Select-Methode.

Ich werde noch ein bisschen erweitern und das Ganze dann der Übersichtlichtkeit wegen an Deinen Originalthread hängen, da es ansonsten hier ein wenig unübersichtlich wird...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 13.06.17 09:58

So. Dein Programm kann nun eine Fahrgestellnummer eintragen, wenn es sich um eine Mehrfachkiste handelt und es kann Statistik. Der Code kommt gleich wieder in mehreren Teilen.


EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Teil 1, 13.06.2017 
Autor: effeff
Datum: 13.06.17 09:59

Public Class Form1
 
    Dim dt1 As New DataTable
    Dim dv1 As DataView
    Dim BindingSource As BindingSource
    Dim SavePath As String = Environment.GetEnvironmentVariable("appdata") & _
      "\erbru"
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Me.Text = "erbrus Inventurprogramm:"
 
        dt1Initialisieren()
 
        dv1 = New DataView(dt1)
 
        BindingSource = New BindingSource()
        BindingSource.DataSource = dv1
 
        DGV1Initialisieren()
 
        cmbAuswahlFuellen()
        cmbKistenartFuellen()
 
        txtFahrgestellnummerInitialisieren()
 
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub cmbKistenartFuellen()
        With cmbKistenart
            .Items.Add("Keine Auswahl")
            .Items.Add("Einzelkiste")
            .Items.Add("Mehrfachkiste Links")
            .Items.Add("Mehrfachkiste Rechts")
        End With
    End Sub
 
    Private Sub cmbAuswahlFuellen()
        With cmbAuswahl
            .Items.Add("Alle")
            .Items.Add("Gefundene")
            .Items.Add("Nicht gefundene")
        End With
    End Sub
 
    Private Sub DGV1Initialisieren()
 
        With DGV1
            .DataSource = BindingSource
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        End With
 
    End Sub
 
    Private Sub dt1Initialisieren()
 
        With dt1
            With dt1
                Dim IDCol As DataColumn = dt1.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Bauteil", Type.GetType("System.String"))
                .Columns.Add("Baudatum", Type.GetType("System.String"))
                .Columns.Add("Status", Type.GetType("System.String"))
                .Columns.Add("Fahrgestellnummer", Type.GetType("System.String"))
 
                .TableName = "erbru"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dt1.Columns("ID")
        dt1.PrimaryKey = primaryKey
 
    End Sub
 
    Private Sub DatenLaden(ByVal FileName As String)
 
 
        dt1.Clear()
 
        Dim sr As New System.IO.StreamReader(FileName)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
                newRow("Status") = ""
                newRow("Fahrgestellnummer") = ""
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
 
    Private Sub cmbAuswahl_SelectedIndexChanged(sender As Object, e As _
      EventArgs) Handles cmbAuswahl.SelectedIndexChanged
        txtSeriennummer.Text = ""
 
        If cmbAuswahl.Text = "Alle" Then
            dv1.RowFilter = Nothing
            ToolStripStatusLabel1.Text = "Alle Datensätze: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Gefundene" Then
            dv1.RowFilter = "Status <> ''"
            ToolStripStatusLabel1.Text = "Gefundene: " & dv1.Count
        ElseIf cmbAuswahl.Text = "Nicht gefundene" Then
            dv1.RowFilter = "Status=''"
            ToolStripStatusLabel1.Text = "Nicht gefundene: " & dv1.Count
        End If
    End Sub
 
    Private Sub ExportToXML()
 
        Dim FileName As String = "erbru_" & Format(Now, "yyyyMMdd_hhmmss") & _
          ".xml"
 
        If Not System.IO.Directory.Exists(SavePath) Then
            System.IO.Directory.CreateDirectory(SavePath)
        End If
 
        With SaveFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = FileName
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = SaveFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            FileName = SaveFileDialog1.FileName
        End If
 
        dt1.WriteXml(FileName)
 
        ToolStripStatusLabel1.Text = "Die XML-Datei " & FileName & " wurde" & _
          "erstellt!"
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Teil 2, 13.06.2017 
Autor: effeff
Datum: 13.06.17 10:00

Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles _
  btnSpeichern.Click
        ExportToXML()
    End Sub
 
    Private Sub btnLaden_Click(sender As Object, e As EventArgs) Handles _
      btnLaden.Click
        LoadXML()
    End Sub
 
    Private Sub LoadXML()
 
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "xml"
            .Filter = "XML Dateien|*.xml"
            .FileName = ""
            '.Multiselect = True
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            FileName = OpenFileDialog1.FileName
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & FileName
            Application.DoEvents()
            dt1.Clear()
            dt1.ReadXml(OpenFileDialog1.FileName)
        End If
 
        Me.Cursor = Cursors.Default
        ToolStripStatusLabel1.Text = "Datensätze: " & dt1.Rows.Count
 
    End Sub
 
    Private Sub btnTextdateiLaden_Click(sender As Object, e As EventArgs) _
      Handles btnTextdateiLaden.Click
        Dim FileName As String = ""
 
        With OpenFileDialog1
            .DefaultExt = "txt"
            .Filter = "TXT Dateien|*.txt"
            .FileName = ""
            .InitialDirectory = SavePath
        End With
 
        Dim res As DialogResult
 
        res = OpenFileDialog1.ShowDialog
 
        If res = DialogResult.Abort Or res = DialogResult.Cancel Then
            Exit Sub
        Else
            Me.Cursor = Cursors.WaitCursor
            ToolStripStatusLabel1.Text = "Lade Daten aus " & _
              OpenFileDialog1.FileName
            Application.DoEvents()
            DatenLaden(OpenFileDialog1.FileName)
            Me.Cursor = Cursors.Default
            Application.DoEvents()
        End If
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Teil 3, 13.06.2017 
Autor: effeff
Datum: 13.06.17 10:01

Private Sub btnSuchen_Click(sender As Object, e As EventArgs) Handles btnSuchen.Click

If dt1.Rows.Count = 0 Then
MessageBox.Show("Du kannst nix suchen! Die Tabelle enthält keine Daten!", "Sirianische Planetenkontrolle:")
Exit Sub
End If

If cmbKistenart.Text = "" Then
MessageBox.Show("Du musst erst die Abfrage zur Kistenart beantworten!")
Exit Sub
End If
If txtFahrgestellnummer.Text = "" And cmbKistenart.Text = "Mehrfachkiste" Then
MessageBox.Show("Du musst noch die Fahrgestellnummer angeben!")
Exit Sub
End If

Dim foundrows() As DataRow

If txtSeriennummer.Text.Length = 7 Then
foundrows = dt1.Select("Seriennummer='" & txtSeriennummer.Text & "'")

If foundrows.Count > 1 Then
MessageBox.Show("Diese Seriennummer existiert mehrfach!")
Exit Sub
End If

If cmbKistenart.Text = "Einzelkiste" Then
foundrows(0).Item("Status") = "Einzelkiste"
ElseIf cmbKistenart.Text.Contains("Mehrfachkiste") Then
foundrows(0).Item("Status") = cmbKistenart.Text
foundrows(0).Item("Fahrgestellnummer") = txtFahrgestellnummer.Text
End If

txtSeriennummer.Text = ""
cmbKistenart.Text = ""
txtFahrgestellnummer.Text = ""

End If

End Sub

Private Sub cmbKistenart_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbKistenart.SelectedIndexChanged
txtFahrgestellnummerInitialisieren()
End Sub

Private Sub txtFahrgestellnummerInitialisieren()
If cmbKistenart.Text.Contains("Mehrfachkiste") Then
txtFahrgestellnummer.Visible = True
Else
txtFahrgestellnummer.Visible = False
End If
End Sub

Private Sub txtStatistik_Click(sender As Object, e As EventArgs) Handles txtStatistik.Click

Dim foundrowsEinzelkiste() As DataRow
foundrowsEinzelkiste = dt1.Select("Status='Einzelkiste'")
Dim Einzelkistenanzahl As Integer = foundrowsEinzelkiste.Count

Dim foundrowsMehrfachkisteLinks() As DataRow
foundrowsMehrfachkisteLinks = dt1.Select("Status='Mehrfachkiste Links'")
Dim MehrfachkistenanzahlLinks As Integer = foundrowsMehrfachkisteLinks.Count

Dim foundrowsMehrfachkisteRechts() As DataRow
foundrowsMehrfachkisteRechts = dt1.Select("Status='Mehrfachkiste Rechts'")
Dim MehrfachkistenanzahlRechts As Integer = foundrowsMehrfachkisteRechts.Count

Dim Mehrfachkistengesamtanzahl As Integer = MehrfachkistenanzahlLinks + MehrfachkistenanzahlRechts

Dim Gesamtanzahl As Integer = dt1.Rows.Count

Dim Meldungstext As String = "Statistik:"
Meldungstext = Meldungstext & vbCrLf & "Gesamtanzahl Datensätze: " & Gesamtanzahl
Meldungstext = Meldungstext & vbCrLf & "Einzelkisten: " & Einzelkistenanzahl
Meldungstext = Meldungstext & vbCrLf & "Mehrfachkisten Gesamt: " & Mehrfachkistengesamtanzahl
Meldungstext = Meldungstext & vbCrLf & "Mehrfachkisten Links: " & MehrfachkistenanzahlLinks
Meldungstext = Meldungstext & vbCrLf & "Mehrfachkisten Rechts: " & MehrfachkistenanzahlRechts

MessageBox.Show(Meldungstext, "Auswertung:")

End Sub
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 13.06.17 10:59

Supi effeff,

so in etwa habe ich es mir vorhin schon mal in einer 2ten Version geschrieben.

schau mir deinen Code an sind ja drei Teile.

Danke, wie sieht es denn bei dir mit dem drucken aus?

ich habe ja die Kennummer auch hinzugefügt, das muss in der Druckerei berücksichtigt werden sonst gibt es einen Bug.

bis denne
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 13.06.17 12:51

Deine Druckfunktion interessierte mich der Neugier halber. Meine sähe etwas pragmatischer aus:

Private Sub btnDrucken_Click(sender As Object, e As EventArgs) Handles _
  btnDrucken.Click
 
        Dim Druckausgabe As String = "<!doctype html>"
        Dim Ausgabedatei As String = System.IO.Path.Combine( _
          Environment.GetEnvironmentVariable("temp"), "Druckausgabe.html")
 
        Druckausgabe = Druckausgabe & vbCrLf & "<meta charset=" & Chr(34) & _
          "utf-8" & Chr(34) & ">"
        Druckausgabe = Druckausgabe & "<html>"
        Druckausgabe = Druckausgabe & "<style>"
        Druckausgabe = Druckausgabe & "table, td, th { border: 1px solid black;" & _
          "}"
        Druckausgabe = Druckausgabe & "</style>"
        Druckausgabe = Druckausgabe & vbCrLf & "<header>"
        Druckausgabe = Druckausgabe & vbCrLf & "Druckausgabe der Daten von" & _
          "erbru:"
        Druckausgabe = Druckausgabe & vbCrLf & "</header>"
        Druckausgabe = Druckausgabe & vbCrLf & "<body>"
        Druckausgabe = Druckausgabe & vbCrLf & "<h1>Druckausgabe:</h1><p>"
        Druckausgabe = Druckausgabe & vbCrLf & "<table>"
 
        Druckausgabe = Druckausgabe & vbCrLf & "<tr>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>ID:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>Seriennummer:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>Bauteil:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>Baudatum:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>Status:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "<th>Fahrgestellnummer:</th>"
        Druckausgabe = Druckausgabe & vbCrLf & "</tr>"
 
        For Each r As DataRow In dt1.Rows
 
            Druckausgabe = Druckausgabe & vbCrLf & "<tr>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & r("ID") & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & r( _
              "Seriennummer") & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & r("Bauteil") & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & r("Baudatum") & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & castDBNull(r( _
              "Status").ToString) & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "<td>" & castDBNull(r( _
            "Fahrgestellnummer").ToString) & "</td>"
            Druckausgabe = Druckausgabe & vbCrLf & "</tr>"
 
        Next
 
        Druckausgabe = Druckausgabe & vbCrLf & "</table>"
        Druckausgabe = Druckausgabe & vbCrLf & "</body>"
        Druckausgabe = Druckausgabe & vbCrLf & "</html>"
 
        Dim sw As New System.IO.StreamWriter(Ausgabedatei)
        sw.Write(Druckausgabe)
        sw.Close()
 
        Dim wb As New WebBrowser
 
        wb.DocumentText = Druckausgabe
 
        While wb.ReadyState <> WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        wb.Print()
 
        wb = Nothing
 
    End Sub
 
    Private Function castDBNull(ByVal ToCast As String) As String
 
        If ToCast = "" Then
            Return " "
        Else
            Return ToCast
        End If
 
    End Function
Edit: Leider werden hier HTML-Tags natürlich umgearbeitet von der Foren-Software... Bei der Function CastDBNull muss es beim ersten Return (wo im Code nur ein Leerzeichen steht) heißen:

&_n_b_s_p_;

Hierbei müssen die Unterstriche weggelassen werden!

EALA FREYA FRESENA

Beitrag wurde zuletzt am 13.06.17 um 12:53:47 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 13.06.17 15:24

Hallo effeff,

da haben wir ja in relativ kurzer zeit was brauchbares umgesetzt, naja ich finde deine Druckerausgabe auch nicht schlecht, aber eine Vorschau wäre schon interessanter für den Anwender. Meine Meinung.

alles funktioniert wie du es beschrieben hast, ich mache mich jetzt noch an einen möglichen Status Bericht so in etwa:

Status Kontrolle vom dd.MM.yyyy hh:mm:ss durch:___________________?

da sind dann die Zahlen relevant. Ich habe das auch bereits aufgehübscht, weiß nicht wie man hier ein Bildchen einfügen kann dann lade ich es gerne mal hoch.

Super hast mir sehr geholfen, die Bennungen Einzelkiste + Mehrfachkiste kann man ja auf die realistischen
Bedürfnisse anpassen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 13.06.17 15:53

Och... Meine Druckausgabe kann man auch vorher anschauen; Entweder, indem man das WebBrowser-Steuerelement auf einer Form anzeigen lässt, oder, indem man eine temporäre Datei mit dem HTML-Inhalt schreibt und diese dann mit jedwedem anderen Browser anzeigen lässt. Das Drucken kann man dann über die Druckfunktion des Browser nutzen...

Um zu sehen, wie man Bilder hochladen kann, brauchst Du nur den HTML-Text des Postings von mir untersuchen, welches mein Bild enthält. Ich habe das Bild einfach bei https://picload.org/ hochgeladen. Von den angebotenen Möglichkeiten habe ich als URL den Direktlink markiert und kopiert. Diesen habe ich dann in das Posting eingefügt, indem ich die bei "Forum-Tags" beschriebene Möglichkeit mit "img" (ganz unten) benutzt habe und dazwischen den Link eingefügt habe.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 13.06.17 18:18



das geht ja einfach, nun Gut ich habe mir meine Dateien mittlerweile in ein extra Form (ListBox) geladen, nun soll es zur weiteren Bearbeitung eingelesen werden und der Dateiname soll mir mit angezeigt werden also Dokument in Bearbeitung kannst du da noch mal helfen?

in Form1 eine txtDokument_inArbeit die ausgewählte Datei einlesen bzw. Überführen
ich meine das es Sinn macht das ins "Archiv" zu legen, und von dort wieder einlesen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 13.06.17 19:13

und hier noch mal weil es mir gefällt

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 13.06.17 20:20

Hallo!

Wo ist Dein Problem dabei?

Du erstellst auf Deiner Auswahlform eine Property. Als Rückgabewert der Form übernimmst Du aus der Property den Dateinamen und übergibst ihn an die Hauptform. Auf der Hauptform ist ja schon eine Funktion, um eine XML-Datei einzulesen.

Schaffst Du das mit den Hinweisen?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 14.06.17 05:56

Danke, aber der OpenFileDialog1 irritiert mich dabei

ich möchte das ich immer den Namen der (Datei, Dokumet) auf der Hauptform angezeigt bekomme für den Anwender damit er sich vergwissert die Richtige Datei in Arbeit ist



Die Dateien lese ich in eine ListBox

  Private Sub btn_Datei_ueberfuehren_Click(sender As Object, e As EventArgs) _
    Handles btn_Datei_ueberfuehren.Click
     'hier klemmt es, die datei soll angezeigt und eingelesen werden
     'im Archiv liegen aber keine txt Dateien nur der Arbeitsstand der mal 
     ' gespeichert wird 
    End Sub
 
    Private Sub btn_Dateien_Aktualisieren_Click(sender As Object, e As _
      EventArgs) Handles btn_Dateien_Aktualisieren.Click
        ListBox1.ClearSelected()
        Archiv_ListBoxfill()
    End Sub
 
    Public Sub Archiv_ListBoxfill()
        'D:\Sperrlisten\Status-Archiv
        Dim Pfad As String = "D:\Sperrlisten\Status-Archiv"
        For Each File As String In FileIO.FileSystem.GetFiles(Pfad, _
          FileIO.SearchOption.SearchAllSubDirectories)
 
            If File.ToLower.EndsWith(".XML", _
              StringComparison.CurrentCultureIgnoreCase) Then
                ListBox1.Items.Add(System.IO.Path.GetFileName(File))
 
            End If
        Next
    End Sub
 
    Private Sub frmSperrlisten_Load(sender As Object, e As EventArgs) Handles _
      Me.Load
        Me.Text = "Status-Archiv"
        Archiv_ListBoxfill()
    End Sub
 
    Private Sub ListBox1_Click(sender As Object, e As EventArgs) Handles _
      ListBox1.Click
        Me.TextBox1.Text = Me.ListBox1.SelectedItem
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 14.06.17 06:21

ich werde noch einige Bugs beseitigen müssen

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 14.06.17 11:50

Wenn Du den OpenFileDialog an dieser Stelle nicht benötigst, dann lasse ihn halt weg oder erstelle eine zweite Routine ohne ihn...

Hier mal ein Beispiel, wie Du Daten von einer Form auf eine andere übernehmen kannst. Die erste Form heißt "Form1" und hat eine TextBox "TextBox1" und einen Button "Button1". Die zweite Form heißt "Form2" und hat nur eine ListBox "ListBox1":

Public Class Form1
 
    Dim Dateipfad As String = ""
    Dim Dateiname As String = ""
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        Dim fForm2 As New Form2
        fForm2.ShowDialog()
        Dateiname = fForm2.Dateiname
        Dateipfad = fForm2.Dateipfad
 
        TextBox1.Text = Dateiname
 
    End Sub
End Class
Public Class Form2
 
    Private _Dateiname As String
    Private _Dateipfad As String
 
    Public Property Dateiname As String
        Get
            Return _Dateiname
        End Get
        Set(ByVal Value As String)
            _Dateiname = Value
        End Set
    End Property
 
    Public Property Dateipfad As String
        Get
            Return _Dateipfad
        End Get
        Set(ByVal Value As String)
            _Dateipfad = Value
        End Set
    End Property
 
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dateipfad = System.IO.Path.Combine(Environment.GetEnvironmentVariable( _
          "appdata"), "erbru")
        Archiv_ListBoxfill()
    End Sub
 
    Private Sub Archiv_ListBoxfill()
 
        For Each File As String In FileIO.FileSystem.GetFiles(Dateipfad,
          FileIO.SearchOption.SearchAllSubDirectories)
 
            If File.ToLower.EndsWith(".xml",
              StringComparison.CurrentCultureIgnoreCase) Then
                ListBox1.Items.Add(System.IO.Path.GetFileName(File))
            End If
        Next
    End Sub
 
 
 
    Private Sub ListBox1_DoubleClick(sender As Object, e As EventArgs) Handles _
      ListBox1.DoubleClick
        Dateiname = ListBox1.SelectedItem
 
        Me.Close()
    End Sub
End Class

EALA FREYA FRESENA

Beitrag wurde zuletzt am 14.06.17 um 12:16:30 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 14.06.17 14:07

schäm erbru

und nun ab ins DGV ?

dt1.clear

??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 14.06.17 15:42

Zitat:

und nun ab ins DGV ?


Ja, nun mal los, junger Mann! Du hast Doch schon eine Routine bekommen, die man mittels eines Buttons aufrufen kann und die dann eine XML-Datei lädt. Diese Routine brauchst Du doch nur anzupassen und ihr den Pfad und den Dateinamen der aufzurufenden XML-Datei zu nennen (System.IO.Path.Combine(Pfad, Dateiname)). Du musst eben aus dem vorliegenden Code den Teil mit dem OpenFileDialog weglassen... Den Pfad der zu öffnenden Datei hast Du doch schon...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 14.06.17 18:22

Danke, warum alter Mann

umgesetzt! Richtig so?
muss da noch eine Sicherheit rein?

  Dim frmSperrlisten As New frmSperrlisten
        frmSperrlisten.ShowDialog()
        Dateiname = frmSperrlisten.Dateiname
        Dateipfad = frmSperrlisten.Dateipfad
 
        txtdokinarbeit.Text = Dateiname
        'so vieleicht
        dt1.Clear()
        dt1.ReadXml(System.IO.Path.Combine(Dateipfad, Dateiname))
und Schluss endlich noch einmal zur Statistik, dann komme ich alleine weiter

die Mehrfachkiste Links / Mehrfachkiste Rechts kann die gleiche "Fahrgestellnummer" haben

nun möchte ich die Fahrgestellnummer zählen in der Statistik ausgeben

also: 123456, 123456, 123457, 1234568, 1234569
= Fahgestenummern: 4 nicht 5 wie ich geschrieben
die hier Fett dargestellten dürfen auch nur maximal 2x gleich sein (für 1x Links 1x Rechts)

verstehst was ich meine?

möchte nachher im Bericht schreiben 4 Fahrgestellnummern oder Mehrfachkisten betroffen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 14.06.17 19:51

Oh effeff,

ich will da ja mit arbeiten nun teste ich so einiges durch und stoße auf ein Problem welches ich nicht nachvollziehen kann warum er das macht.

btnsuchen, Änderung sonst nichts gemacht.
  If dt1.Rows.Count = 0 Then
            MessageBox.Show("Du kannst nix suchen! Die Tabelle enthält keine" & _
              "Daten!" _
                            , "Sicherheitsabfrage:", MessageBoxButtons.OK, _
                            MessageBoxIcon.Warning)
            Exit Sub
        End If
 
        If cmbKistenart.Text = "" Then
            MessageBox.Show("Du musst erst die Abfrage zur Kontrollart" & _
              "beantworten!" _
                            , "Sicherheitsabfrage:", MessageBoxButtons.OK, _
                            MessageBoxIcon.Warning)
            cmbKistenart.Select()
            Exit Sub
        End If
        If txtFahrgestellnummer.Text = "" And cmbKistenart.Text.Contains( _
          "Mehrfachkiste") Then
            MessageBox.Show("Du musst noch die Fahrgestellnummer angeben!" _
                            , "Sicherheitsabfrage:", MessageBoxButtons.OK, _
                            MessageBoxIcon.Information)
            txtFahrgestellnummer.Select()
            Exit Sub
        End If
        If txtFahrgestellnummer.Text.Length <> 6 Then
            MessageBox.Show("Fahrgestellnummer prüfen!" _
                            , "Sicherheitsabfrage:", MessageBoxButtons.OK, _
                            MessageBoxIcon.Warning)
            txtFahrgestellnummer.Select()
            txtFahrgestellnummer.SelectionLength = 0
            txtFahrgestellnummer.SelectionStart = _
              txtFahrgestellnummer.TextLength
            Exit Sub
        End If
 
        Dim foundrows() As DataRow
 
        If txtSeriennummer.Text.Length = 7 Then
            foundrows = dt1.Select("Seriennummer='" & txtSeriennummer.Text & _
              "'")
 
            If foundrows.Count > 1 Then
                MessageBox.Show("Diese Seriennummer existiert mehrfach!")
                Exit Sub
            End If
 
            If cmbKistenart.Text = "Einzelkiste" Then
                foundrows(0).Item("Status") = "Einzelkiste"
            ElseIf cmbKistenart.Text.Contains("Mehrfachkiste") Then
                foundrows(0).Item("Status") = cmbKistenart.Text
                foundrows(0).Item("Fahrgestellnummer") = _
                  txtFahrgestellnummer.Text
            End If
 
            txtSeriennummer.Text = ""
            cmbKistenart.Text = ""
            txtFahrgestellnummer.Text = ""
 
        End If
2 Datensätze gemacht Links Rechts nichts besonderes und dann ab dritte Seriennummer knallt es??



das muss ich verstehen, darf nicht passieren mein Arbeitsstand wäre dann auch weg und muss von vorne mit Kontrolle anfangen. habe es nun drei mal getestet immer wieder der Bug (3te Eingabe)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 14.06.17 20:52

Nun... Das Programm macht genau das, was man ihm gesagt hat. Wenn eine Seriennummer existiert, wird der Datensatz auch gefunden. Wie Du anhand Deines Bildes sehen kannst, hast Du Dich verschrieben; Diese Seriennummer gibt es nicht. Da noch kein Code-Teil existiert, um diesen Umstand abzufangen, knallt es.

Ändere diese Funktion, um abzufangen, wenn etwas nicht gefunden werden kann:

 Private Sub btnSuchen_Click(sender As Object, e As EventArgs) Handles _
   btnSuchen.Click
 
        If dt1.Rows.Count = 0 Then
            MessageBox.Show("Du kannst nix suchen! Die Tabelle enthält keine" & _
              "Daten!", "Sirianische Planetenkontrolle:")
            Exit Sub
        End If
 
        If cmbKistenart.Text = "" Then
            MessageBox.Show("Du musst erst die Abfrage zur Kistenart" & _
              "beantworten!")
            Exit Sub
        End If
        If txtFahrgestellnummer.Text = "" And cmbKistenart.Text = _
          "Mehrfachkiste" Then
            MessageBox.Show("Du musst noch die Fahrgestellnummer angeben!")
            Exit Sub
        End If
 
        Dim foundrows() As DataRow
 
        If txtSeriennummer.Text.Length = 7 Then
            foundrows = dt1.Select("Seriennummer='" & txtSeriennummer.Text & _
              "'")
 
            'Das hier einfügen, um abzufangen, wenn eine Seriennummer nicht 
            ' gefunden wurde bzw. nicht existiert!
            If foundrows.Count = 0 Then
                MessageBox.Show("Diese Seriennummer existiert nicht!", _
                  "Unternehmen Stardust:")
                Exit Sub
            End If
            'Ende neuer Teil
 
            If foundrows.Count > 1 Then
                MessageBox.Show("Diese Seriennummer existiert mehrfach!")
                Exit Sub
            End If
 
            If cmbKistenart.Text = "Einzelkiste" Then
                foundrows(0).Item("Status") = "Einzelkiste"
            ElseIf cmbKistenart.Text.Contains("Mehrfachkiste") Then
                foundrows(0).Item("Status") = cmbKistenart.Text
                foundrows(0).Item("Fahrgestellnummer") = _
                  txtFahrgestellnummer.Text
            End If
 
            txtSeriennummer.Text = ""
            cmbKistenart.Text = ""
            txtFahrgestellnummer.Text = ""
 
        End If
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 15.06.17 06:23

Danke, Danke effeff,

wie heißt du eigentlich wirklich?

mein Code schnipsel Übertrag in dt1 war Richtig?

ein letztes Anliegen, dann müsste ich zurechtkommen hatte ich im vorletzten Post schon angeschnitten.
bist noch mal dabei? Bin Froh das ich es mit dir soweit hinbekommen habe aber auch das man hier ein Bild anhängen kann Super, denn manchmal ist son Bild mehr Wert als Worte oder?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 15.06.17 15:54

Nun, effeff ist natürlich nur ein Synonym... In Wirklichkeit heiße ich ff...

Zu Deiner Notwendigkeit, zu überprüfen, ob eine bestimmte Eingabe schon getätigt wurde:

Wenn eine Seriennummer eingegeben wurde sowie bei einer Mehrfachkiste die weiteren Kriterien, dann wird als Suchergebnis doch eine DataRow ausgegeben. Momentan werden in diese DataRow dann die erforderlichen Eingaben getätigt. Du brauchst doch nur vor dem Eintragen prüfen, ob in den entsprechenden Feldern schon Werte stehen und wenn ja, dann eine Warnmeldung auszugeben. Das solltest Du alles schaffen.

Deine Statistik kann Du so machen, wie es hier von Hawk beschrieben wird: http://www.dreamincode.net/forums/topic/211052-group-and-count-datatable/

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 15.06.17 19:44

ich nerve, sorry verstehe was nicht an deinem Link group count
es sieht ja brauchbar aus bei mir wieder mal die Umsetzung.

habe noch einen denkfehler, so kann es nicht passen:

 Dim foundrowsFahrgestellnummer() As DataRow
        foundrowsFahrgestellnummer = dt1.Select("Fahrgestellnummer =" & _
          "'Fahrgestellnummer'")
        Dim Fahrgestellnummeranzahl As Integer = _
        foundrowsFahrgestellnummer.Count
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 15.06.17 20:12

so zählt er auch 2

links 123456
rechts 123456 soll 1ne Fahrgestellnummer da Links gefunden, Rechts gefunden

  Dim foundrowsFahrgestellnummer = From t In dt1.AsEnumerable() _
            Group t By Fahrgestellnummer = t.Field(Of String)( _
            "Fahrgestellnummer") Into Group _
            Select Fahrgestellnummer = Group.Count()
 
        Dim Fahrgestellnummeranzahl As Integer = _
          foundrowsFahrgestellnummer.Count
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 16.06.17 16:03

Ja... Logisch! Es werden ja schließlich nur alle Fahrgestellnummern gezählt, egal ob links oder rechts. Wenn Du noch andere Felder dazu berücksichtigen musst, musst Du entweder Deine Abfrage ändern oder die Gegebenheiten. Die Gegebenheiten kannst Du z. B. ändern, indem Du aus Deiner Tabelle den Teil an Daten, welchen Du benötigst, in eine Hilfstabelle kopierst und diese dann auswertest. Verstehst Du das? Damit hast Du auch gleich die Gewähr, auszuwerten, ob es sich um eine linkes oder rechtes Fach handelt.

Also: Es ist ein neuer Button "btnHilfstabelleAnlegen" hinzugekommen. Ferner ist eine komplette neue Form, die Form "frmBericht" dazugekommen mit einem DataGridView "dgvErgebnis":

Zu Form1 dazu:

Private Sub btnHilfstabelleAnlegen_Click(sender As Object, e As EventArgs) _
  Handles btnHilfstabelleAnlegen.Click
        dtHelpInitialisieren()
    End Sub
 
    Private Sub dtHelpInitialisieren()
 
        Dim dtHelp As New DataTable
        Dim i As Integer = 0
 
        With dtHelp
            With dtHelp
                Dim IDCol As DataColumn = dtHelp.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Fahrgestellnummer_Status", Type.GetType( _
                  "System.String"))
                .TableName = "Help"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dtHelp.Columns("ID")
        dtHelp.PrimaryKey = primaryKey
 
        For Each r As DataRow In dt1.Rows
 
            If not isdbnull(r("Fahrgestellnummer")) Then
                Dim newRow As DataRow = dtHelp.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Fahrgestellnummer_Status") = r("Fahrgestellnummer") & "" & _
                  "- " & r("Status")
 
                dtHelp.Rows.Add(newRow)
 
            End If
 
        Next
 
        Dim dtErgebnis As New DataTable
 
        dtErgebnis.Columns.Add("Fahrgestellnummer_Status")
        dtErgebnis.Columns.Add("Count")
 
        Dim query = (From dr In (From d In dtHelp.AsEnumerable Select New With _
          {.FS = d("Fahrgestellnummer_Status")}) Select dr.FS Distinct)
 
        For Each colName As String In query
 
            Dim cName = colName
 
            Dim cCount = (From row In dtHelp.Rows Select row Where row( _
              "Fahrgestellnummer_Status").ToString = cName).Count
 
            dtErgebnis.Rows.Add(colName, cCount)
 
        Next
 
        Dim fBericht As New frmBericht
 
        fBericht.dtErgebnis = dtErgebnis
        fBericht.ShowDialog()
 
    End Sub
Der Code von Form2:

Public Class frmBericht
 
    Private _dtErgebnis As DataTable
 
    Public Property dtErgebnis As DataTable
        Get
            Return _dtErgebnis
        End Get
        Set(ByVal Value As DataTable)
            _dtErgebnis = Value
        End Set
    End Property
 
    Private Sub frmBericht_Load(sender As Object, e As EventArgs) Handles _
      MyBase.Load
        dgvErgebnis.DataSource = dtErgebnis
    End Sub
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 16.06.17 18:14

Danke effeff,

nun will ich den Code und das Ergebnis verstehen??
das sieht für mich eher wie eine Detail Übersicht aus oder?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 16.06.17 19:22

bild gelöscht..., da habe ich was falsch gemacht

im Bild zähle ich aber 3 Fahrgestellnummern weil doch Bauteil Links Bauteil recht zur 123456 gehören

das Ergebnis was du ermittelst habe ich auch in der Auswahl "gefundene"

aber für heute ist genug

Bildvorschau, da ziemlich groß




Beitrag wurde zuletzt am 16.06.17 um 19:31:26 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 17.06.17 15:54

Mir ist immer noch nicht ganz klar, was Du gezählt haben willst. Erkläre das doch einmal bitte in ganzen Sätzen.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 17.06.17 18:20

jo effeff,

die Fahrgestellnummer 123456- Bauteil Links
die Fahrgestellnummer 123456- Bauteil Rechts
ist eine Kiste, Auto, Fahrzeug. Klar die schreibe ich 2 mal in die Suchenmaske weil der Code erst gesucht wird 1x der Linke Code aus Fahrzeug und dann der Rechte Code aus dem Fahrzeug
doch ist es eben ein Fahrzeug
und nicht 2 wie diese Fahrgestellnummern
die 123457 Links
die 123458 Links

sind auch unterschiedliche, und der rechte Code war nicht in der Suchenmaske, das schreibe ich dann auch nicht auf. Aber es sind Rechnerisch 4 Bauteile in 3 Mehrfachkisten für die Statistik Auswertung.

evtl. so verstanden effeff?

die Liste in die durchsucht wird ist auch nicht gleich Prüfumfang die können in einem Lager mit 1000 Teilen gefunden werden, darum benötige ich auch für die Auswertung die möglichkeit da einen "Prüfumfang" zu hinterlegen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 18.06.17 12:54

evtl so Bildlich besser zu verstehen?

ich habe das Netz durchsucht aber nichts geignetes gefunden, bzw. verstanden

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 18.06.17 18:10

Du könntest dazu diese Abfrage benutzen:

    Private Sub Abfrage2()
 
        Dim AnzahlMehrfachkisteLinks As Integer = 0
        Dim AnzahlMehrfachkisteRechts As Integer = 0
        Dim AnzahlFahrgestellnummern As Integer = 0
 
        Dim expression As String
 
        expression = "Status = 'Mehrfachkiste Links'"
        Dim foundRowsML() As DataRow
        foundRowsML = dt1.Select(expression)
        AnzahlMehrfachkisteLinks = UBound(foundRowsML) + 1
 
        expression = "Status = 'Mehrfachkiste Rechts'"
        Dim foundRowsMR() As DataRow
        foundRowsMR = dt1.Select(expression)
        AnzahlMehrfachkisteRechts = UBound(foundRowsMR) + 1
 
        Dim fahrgestelldt As DataTable = dt1.DefaultView.ToTable(True, _
          "Fahrgestellnummer")
        Dim foundrowsFahrgestellnummer() As DataRow
        foundrowsFahrgestellnummer = fahrgestelldt.Select("Fahrgestellnummer<>''")
        AnzahlFahrgestellnummern = foundrowsFahrgestellnummer.Count
 
        MessageBox.Show("Anzahl Mehrfachkiste Links: " & _
          AnzahlMehrfachkisteLinks & vbCrLf & "Anzahl Mehrfachkiste Rechts: " & _
          AnzahlMehrfachkisteRechts & vbCrLf & "Anzahl Fahrgestellnummern: " & _
          AnzahlFahrgestellnummern)
 
    End Sub

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 18.06.17 19:51

Danke funktioniert
doch wie funktioniert der Code eigentlich bitte
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 19.06.17 08:11

noch etwas, effeff

habe die Spalte Count rausgenommen, die brauche ich an der Stelle nicht
und habe stattdessen die Seriennummer mit in den String genommen.

Nun zieht er alle Seriennummern in den "Bericht" was ich eigentlich nicht möchte da sollen nur die
Fahrgestellnummer & die dazugehörige Seriennummer rein.

  Dim dtHelp As New DataTable
        Dim i As Integer = 0
 
        With dtHelp
            With dtHelp
                Dim IDCol As DataColumn = dtHelp.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Fahrgestellnummer_Status", Type.GetType( _
                  "System.String"))
                .TableName = "Help"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dtHelp.Columns("ID")
        dtHelp.PrimaryKey = primaryKey
 
        For Each r As DataRow In dt1.Rows
 
            If Not isdbnull(r("Fahrgestellnummer")) Then
                Dim newRow As DataRow = dtHelp.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Fahrgestellnummer_Status") = r("Fahrgestellnummer") & _
                  "" & _
                  "- " & r("Status") & " [SN- " & r("Seriennummer") & " ]"
 
                dtHelp.Rows.Add(newRow)
 
            End If
 
        Next
 
        Dim dtErgebnis As New DataTable
 
        dtErgebnis.Columns.Add("Fahrgestellnummer_Status_NIO_Links_Rechts_SN")
        'dtErgebnis.Columns.Add("Count")
 
        Dim query = (From dr In (From d In dtHelp.AsEnumerable Select New With _
          {.FS = d("Fahrgestellnummer_Status")}) Select dr.FS Distinct)
 
        For Each colName As String In query
 
            Dim cName = colName
 
            Dim cCount = (From row In dtHelp.Rows Select row Where row( _
              "Fahrgestellnummer_Status").ToString = cName).Count
 
            dtErgebnis.Rows.Add(colName)
 
        Next
kann von hier aus kein Bild hochladen

hoffe also das du verstehst was ich meine, das Ding ist nun soweit das mir beim testen natürlich Dinge auffallen die ich nicht vorhergesehen habe. Und da brauche ich dich noch eine Weile wenn das OK ist?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 19.06.17 11:40

da ich kein Bild anfügen kann,

evtl. hilft die Darstellung im Code was ich gegen 08:11 gesendet habe besser zu verstehen.

in der dgvErgebnis frmBericht sieht das nun so aus:
alle Datensätze mit ohne Fahrgestellnummer...
 
- [SN- AHEH08K]
- [SN- AHEH08N]
- [SN- AHEH08O]
- [SN- AHEH08R]
- [SN- AHEH08S]
794283- Bauteil L. [SN- AHEG02G]
794283- Bauteil R. [SN- AHEG02N]
 
 
dh. er zieht mir alle Daten rein mit und ohne "Fahrgestellnummer" bei 1054 _
  Datensätzen sind das incl. der Fahrgestellnummern 1054
in dieser Übersicht möchte ich nur die Fahrzeuge die betroffen sind ( _
Fahrgestellnummern + Bauteil + SN) wie die 2 letzten Datensätze wiedergeben
 
Das möchte ich als Ergebnis der Kontrolle ausgeben können, um eine Liste ( _
  Übersicht) zu haben. die ohne Fahrgestellnummern sind noch nicht geprüft oder _
  in Einzelkisten
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 19.06.17 13:47

Gleich eine der ersten Postings von mir beinhaltete eine ComboBox, mit welcher Du Daten filtern konntest. Du brauchst nur die davon benutzte Funktion anzusehen, um Deine Daten entsprechend auswählen zu können...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 19.06.17 18:03

na ja effeff,

hast ja im Prinzip Recht nur filtere ich an der Stelle nicht der Filter funktioniert ja auch.


hier noch mal die Prozedur die aktuell abläuft, damit zieht er sich alle Daten in die aufrufende Form
evtl. kannst du es so bei dir mal nachstellen mit vielen Daten bitte.
 Dim dtHelp As New DataTable
        Dim i As Integer = 0
 
        With dtHelp
            With dtHelp
                Dim IDCol As DataColumn = dtHelp.Columns.Add("ID", Type.GetType( _
                  "System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Seriennummer", Type.GetType("System.String"))
                .Columns.Add("Fahrgestellnummer_Status", Type.GetType( _
                  "System.String"))
                .TableName = "Help"
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dtHelp.Columns("ID")
        dtHelp.PrimaryKey = primaryKey
 
        For Each r As DataRow In dt1.Rows
 
            If Not IsDBNull(r("Fahrgestellnummer")) Then
                Dim newRow As DataRow = dtHelp.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Fahrgestellnummer_Status") = r("Fahrgestellnummer") & _
                  "" & _
                  "- " & r("Status") & " [SN- " & r("Seriennummer") & " ]"
 
                dtHelp.Rows.Add(newRow)
 
            End If
 
        Next
 
        Dim dtErgebnis As New DataTable
 
        dtErgebnis.Columns.Add("Fahrgestellnummer_Status_NIO_Links_Rechts_SN")
        'dtErgebnis.Columns.Add("Count")
 
        Dim query = (From dr In (From d In dtHelp.AsEnumerable Select New With _
          {.FS = d("Fahrgestellnummer_Status")}) Select dr.FS Distinct)
 
        For Each colName As String In query
 
            Dim cName = colName
 
            Dim cCount = (From row In dtHelp.Rows Select row Where row( _
              "Fahrgestellnummer_Status").ToString = cName).Count
 
            dtErgebnis.Rows.Add(colName)
 
        Next
 
        'Statistik
        Dim AnzahlMehrfachkisteLinks As Integer = 0
        Dim AnzahlMehrfachkisteRechts As Integer = 0
        Dim AnzahlFahrgestellnummern As Integer = 0
 
        Dim expression As String
 
        expression = "Status = 'Bauteil L.'"
        Dim foundRowsML() As DataRow
        foundRowsML = dt1.Select(expression)
        AnzahlMehrfachkisteLinks = UBound(foundRowsML) + 1
 
        expression = "Status = 'Bauteil R.'"
        Dim foundRowsMR() As DataRow
        foundRowsMR = dt1.Select(expression)
        AnzahlMehrfachkisteRechts = UBound(foundRowsMR) + 1
 
        Dim fahrgestelldt As DataTable = dt1.DefaultView.ToTable(True, _
          "Fahrgestellnummer")
        Dim foundrowsFahrgestellnummer() As DataRow
        foundrowsFahrgestellnummer = fahrgestelldt.Select("Fahrgestellnummer<>''")
        AnzahlFahrgestellnummern = foundrowsFahrgestellnummer.Count
 
        'Bericht öffnen
        Using frm As New frmBericht
            With frm
                .dtErgebnis = dtErgebnis
                .ShowInTaskbar = True
                .tbxAnzahlBauteileGesamt.Text = dtErgebnis.Rows.Count
                .tbxAnzahlBauteilelinks.Text = AnzahlMehrfachkisteLinks.ToString
                .tbxAnzahlBauteilerechts.Text = _
                  AnzahlMehrfachkisteRechts.ToString
                .tbxAnzahlFahrzeuge.Text = AnzahlFahrgestellnummern.ToString
                .BringToFront()
                .TopMost = True
                .ShowDialog(Me)
                Me.Cursor = Cursors.Default
            End With
        End Using
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 20.06.17 06:43

noch ein Hinweis, habe es bis jetzt nicht hinbekommen wie ich es brauche.

Detail aus letztem Post von mir



so eine Liste wird im Anschluss der Kontrolle benötigt, um gezielt das entsprechende Bauteil zu
tauschen. Das ist Wichtig darum möchte ich es ja so in der aufrufenden Form (frmBericht) haben
um genau so eine Liste zu drucken, da brauche ich den anderen Kram nicht nur den "Fehlerfund"

Fahrgestellnummer - Bauteil X. - Seriennummer = eine Spalte

ich bekomme es nicht hin, evtl. hast du effeff doch eine Lösung?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 20.06.17 09:36

Warum iterierst Du nicht einfach die Original-DataTable durch und holst Dir dort die Daten, welche Du benötigst? Du kannst die Daten doch dann in eine Auswertetabelle schreiben und diese lässt Du Dir dann auf dem frmBericht im DataGridView anzeigen. Die Techniken dazu hast Du bereits mehrfach vorgetragen bekommen; Nur so als Beispiel, wenn Dir das Auswerten per DataView nicht gefällt.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 20.06.17 11:50

hilf mir bitte mal dabei, ich kriege es nicht gebacken wäre mir aber Wichtig so bzgl. der Fahrgestellnummer auszuwerten, oder Step by Step damit mein Kopf es versteht.

habe vorher andere Technik programmiert deine Technik ist bei mir noch in der Lernphase Sorry.

würde es ja sonst so machen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 20.06.17 18:06

Private Sub Abfrage3()
 
        Dim dtAuswertung As New DataTable
        Dim i As Integer = 0
 
        With dtAuswertung
            With dtAuswertung
                Dim IDCol As DataColumn = dtAuswertung.Columns.Add("ID", _
                  Type.GetType("System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Daten", Type.GetType("System.String"))
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dtAuswertung.Columns("ID")
        dtAuswertung.PrimaryKey = primaryKey
 
        For Each r As DataRow In dt1.Rows
 
            If Not IsDBNull(r("Fahrgestellnummer")) Then
                Dim newRow As DataRow = dtAuswertung.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Daten") = r("Fahrgestellnummer") & " - " & r("Status") _
                  & " [SN-" & r("Seriennummer") & "]"
 
                dtAuswertung.Rows.Add(newRow)
 
                End If
 
        Next
 
 
        Dim fBericht As New frmBericht
 
        fBericht.dtErgebnis = dtAuswertung
        fBericht.ShowDialog()
 
    End Sub
Code für frmBericht wie gehabt; Auf dem frmBericht gibt es nur ein DataGridView "dgvErgebnis":

Public Class frmBericht
 
    Private _dtErgebnis As DataTable
 
    Public Property dtErgebnis As DataTable
        Get
            Return _dtErgebnis
        End Get
        Set(ByVal Value As DataTable)
            _dtErgebnis = Value
        End Set
    End Property
 
    Private Sub frmBericht_Load(sender As Object, e As EventArgs) Handles _
      MyBase.Load
        dgvErgebnis.DataSource = dtErgebnis
    End Sub
End Class

EALA FREYA FRESENA

Beitrag wurde zuletzt am 20.06.17 um 18:09:53 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 20.06.17 18:57

Danke, Danke doch das Ergebnis ist nicht welches ich mir wünsche

in diesem Fall hätte er mir nur die oberen 2 Datensätze liefern sollen, dann wäre es genau das was ich brauche

ich kriege nach wie vor alle Seriennummern mit und ohne Fahrgestellnummer.

Aber genau das bekomme ich ja auch nicht auf die Reihe

wirklich habe verschiedene Dateien eingelesen mal geht es mal nicht und eher nicht
schleppen wir da irgendwie Daten mit die wir aber nicht wollen?



Beitrag wurde zuletzt am 20.06.17 um 19:16:46 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 20.06.17 19:35

diesen Code "FETT" habe ich geändert

überall wo du "" verwendest habe ich String.Emptyverwendet das ist sicherer


 Private Sub DatenLaden(ByVal FileName As String)
 
 
        dt1.Clear()
 
        Dim sr As New System.IO.StreamReader(FileName)
        Dim Zeile As String = Nothing
        Dim i As Integer = 0
 
        Dim arr() As String = Nothing
 
        Do While Not sr.EndOfStream
            Zeile = sr.ReadLine()
 
            arr = Zeile.Split(",")
            If Not arr(0).Contains("Seriennummer") Then
 
                Dim newRow As DataRow = dt1.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Seriennummer") = arr(0)
                newRow("Bauteil") = arr(1)
                newRow("Baudatum") = arr(2)
                newRow("Status") = String.Empty
                newRow("Fahrgestellnummer") = String.Empty
 
                dt1.Rows.Add(newRow)
 
            End If
        Loop
 
        sr.Close()
 
        Application.DoEvents()
 
    End Sub
ich glaube habe das Problem gefunden, die xml Dateien sind evtl. Schuld

hier der Ausschnitt einer xml die dann beim einlesen Probleme macht.

<?xml version="1.0" standalone="true"?>
 
-<DocumentElement>
 
 
-<erbru>
 
<ID>1</ID>
 
<Seriennummer>AHEF4W3</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:01</Baudatum>
 
<Status/>
 
<Fahrgestellnummer/>
 
</erbru>
 
 
-<erbru>
 
<ID>2</ID>
 
<Seriennummer>AHEF4W4</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:01</Baudatum>
 
<Status/>
 
<Fahrgestellnummer/>
 
</erbru>
 
 
+<erbru>
 
 
-<erbru>
 
<ID>4</ID>
 
<Seriennummer>AHEF4W8</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:32</Baudatum>
 
<Status/>
 
<Fahrgestellnummer/>
 
</erbru>
 
 
-<erbru>
 
<ID>5</ID>
 
<Seriennummer>AHEF4WB</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:58</Baudatum>
 
<Status/>
 
<Fahrgestellnummer/>
 
</erbru>
 
 
-<erbru>
 
<ID>6</ID>
 
<Seriennummer>AHEF4WC</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:58</Baudatum>
 
<Status/>
 
<Fahrgestellnummer/>
 
</erbru>
und mit der funktioniert es
<?xml version="1.0" standalone="true"?>
 
-<DocumentElement>
 
 
-<erbru>
 
<ID>1</ID>
 
<Seriennummer>AHEF4W3</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:01</Baudatum>
 
</erbru>
 
 
-<erbru>
 
<ID>2</ID>
 
<Seriennummer>AHEF4W4</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:01</Baudatum>
 
</erbru>
 
 
-<erbru>
 
<ID>3</ID>
 
<Seriennummer>AHEF4W7</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:32</Baudatum>
 
</erbru>
 
 
-<erbru>
 
<ID>4</ID>
 
<Seriennummer>AHEF4W8</Seriennummer>
 
<Bauteil>5Q0512013JG</Bauteil>
 
<Baudatum>15.05.201723:35:32</Baudatum>
 
</erbru>
jetzt ist die Frage wie lässt sich das beim lesen speichern sicherstellen, das ich als Anwender nicht davon überrascht werde?

Beitrag wurde zuletzt am 20.06.17 um 19:46:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 20.06.17 22:29

Ich bekomme Dein Ergebnis nicht; Bei mir funktioniert das. Was hast DU geändert, was ich nicht habe?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 21.06.17 06:39

schau dir mal deine xml Datei an, dort sollten zunächst 3 Spalten sein
also ohne Status und Fahrgestellnummer, die waren bei mir leer aber vorhanden und darum hat er alles eingezogen.

in deiner xml sind die sicher nur da vorhanden wo auch Daten drin stehen oder du hast noch nicht Zwischengespeichert

die Spalte Status = "" lege ich so an Status = String.Empty
die Spalte Fahrgestellnummer = "" lege ich so an Fahrgestellnummer = String.Empty

nach dem ich die entfernt habe lief es auch bei mir

hoffe hast verstanden
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: effeff
Datum: 21.06.17 09:24

Nein, in meiner XML sind alle Daten enthalten und die String.Empty-Geschichten hast DU eingebaut - die gibt es bei mir nicht...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 21.06.17 11:53

auch die zuvor noch leeren Datenfelder Status, Fahrgestellnummer?

mach doch mal einen Screenshot.

habe vorhin wieder eine XML erwischt die so aussah

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<erbru>
<ID>1</ID>
<Seriennummer>AHEF4W3</Seriennummer>
<Bauteil>5Q0512013JG</Bauteil>
<Baudatum>15.05.201723:35:01</Baudatum>
<Status/>
<Fahrgestellnummer/>
</erbru>
<erbru>
<ID>2</ID>
<Seriennummer>AHEF4W4</Seriennummer>
<Bauteil>5Q0512013JG</Bauteil>
<Baudatum>15.05.201723:35:01</Baudatum>
<Status/>
<Fahrgestellnummer/>
</erbru>
usw.
</DocumentElement>

und damit funktioniert das nicht, als ich das entfernt hatte hat es funktioniert
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 22.06.17 06:26

Hallo effeff alles Gut bei dir?

Danke dir noch mal für die Begleitung etc. zu dem Programm. ich bin derzeit am testen ob noch irgendetwas da verbessert werden muss ich schauen. so eine Liste wird nun ordentlich generiert
auf der frmBericht habe ich noch einiges hinzugefügt. Zusmmenfassung und Angaben zum Prüfer wer hat die Kontrolle ausgeführt. die Tabelle zu drucken hätte ich kein Problem das funktioniert bei mir ähnlich wie in der Form1

ich möchte dich fragen wie du das drucken angehen würdest zuerst eine Überschrift mittig DINA4 Hochformat Kontroll Status: Format(Now, "ddMMyyyy HH:mm:ss")

dann die Kopfdaten wie in der Form zu sehen also die Zusammenfassung und Angaben zum Prüfer

darunter nun die Liste mit der ID und Fahrzeugdaten das wäre perfect. das ganze als Vorschau und dann drucken.

ich probier aber weiter muss mir das evtl. mal auf ein Blatt malen

Unterschrift:


Fertig ungefähr so:

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Suchen und Markieren nach DGV2 übergeben 
Autor: ERBRU
Datum: 24.06.17 18:55

lange nichts von dir gehört effeff,

ich denke habe nun alles was ich brauche auch ein Bericht mit DGV wird mittlerweile gedruckt.

Anmerkung: habe die Abfrage optimiert, damit ich nur die Daten mit "Fahrgestellnummer" in die dtAuswertung schreibe, das wollte immer noch nicht sauber funktinieren.
schau dir mal die Fettgedruckte Zeile genauer an

also wünsch dir alles Gute und Danke für deine Hilfe hier im Forum

probier mal diesen Code der funktioniert
  Dim dtAuswertung As New DataTable
        Dim i As Integer = 0
 
        With dtAuswertung
            With dtAuswertung
                Dim IDCol As DataColumn = dtAuswertung.Columns.Add("ID", _
                  Type.GetType("System.Int32"))
                IDCol.AllowDBNull = False
                IDCol.Unique = True
 
                .Columns.Add("Daten", Type.GetType("System.String"))
 
            End With
        End With
 
        Dim primaryKey(1) As DataColumn
        primaryKey(1) = dtAuswertung.Columns("ID")
        dtAuswertung.PrimaryKey = primaryKey
 
        For Each r As DataRow In dt1.Rows
 
            If r("Fahrgestellnummer") IsNot DBNull.Value AndAlso CStr(r( _
            "Fahrgestellnummer")).Trim <> "" Then 
'Ist eigentlich verständlich die Codezeile macht genau das was ich will
'erst eine Neue Row einfügen wenn auch wiklich die Fahrgestellnummer drin steht
                Dim newRow As DataRow = dtAuswertung.NewRow
                i = i + 1
 
                newRow("ID") = i
                newRow("Daten") = r("Fahrgestellnummer") & " - " & r("Status") _
                 & " - " & r("Bauteil") & " - " & " [SN-" & r("Seriennummer") & _
                 "]"
 
                dtAuswertung.Rows.Add(newRow)
 
            End If
 
        Next
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