| |
VB.NET - FortgeschritteneSuchen 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? | |
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 | |
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? | |
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 | |
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. | |
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. | |
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 | |
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. | |
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. | |
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. | |
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. | |
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 | |
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) | |
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. | |
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 | |
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? | |
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 | |
Re: Suchen und Markieren nach DGV2 übergeben | | | Autor: ERBRU | Datum: 08.06.17 17:55 |
| Sorry effeff,
die Antwort war für dich | |
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 | |
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. | |
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 | |
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 | |
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. | |
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 ? | |
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! | |
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 | |
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. | |
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? | |
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 | |
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?
| |
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? | |
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? | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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? | |
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 | |
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 | |
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 | |
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 | |
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 | |
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. | |
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. | |
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 | |
Re: Suchen und Markieren nach DGV2 übergeben | | | Autor: ERBRU | Datum: 13.06.17 19:13 |
| und hier noch mal weil es mir gefällt
| |
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 | |
Re: Suchen und Markieren nach DGV2 übergeben | | | Autor: ERBRU | Datum: 14.06.17 06:21 |
| ich werde noch einige Bugs beseitigen müssen
| |
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
?? | |
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 | |
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)
| |
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 | |
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?
| |
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 | |
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 | |
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 | |
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?
| |
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. | |
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 | |
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. | |
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
| |
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 | |
Re: Suchen und Markieren nach DGV2 übergeben | | | Autor: ERBRU | Datum: 18.06.17 19:51 |
| Danke funktioniert
doch wie funktioniert der Code eigentlich bitte | |
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? | |
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 | |
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 | |
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 | |
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? | |
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 | |
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 | |
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. | |
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. | |
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. | |
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 | |
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 | |
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 | |
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 | |
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:
| |
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 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|