vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Güldner1
Datum: 12.03.18 19:37

Hallo

ich möchte in einem Datagridview Zellenwerte abspeichern. Dabei möchte ich nachdem ich den Wert eingebeben habe, die Zelle entweder mit Pfeil nach oben, unten, recht oder links verlassen. In dem Moment soll dann die Speicherung in die DB erolgen. Komischerweise klappt es wunderbar in dem Moment wenn ich die Pfeil nach oben bzw. unten Taste drücke, nicht aber wenn ich die Pfeil Rechts/Links taste drücke. Woran liegt es.


Private Sub datagridview1_down(ByVal sender As Object, ByVal e As Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyUp

Dim x As Integer, y As Integer, Feldname As String = ""

x = Me.DataGridView1.CurrentCell.ColumnIndex
y = Me.DataGridView1.CurrentCell.RowIndex

If e.KeyCode = Keys.Right Then
x = x - 1
Else
x = x
End If

Feldname = Me.DataGridView1.Columns.Item(x).HeaderText.ToString
Me.DataGridView1("Feldindex", y).Value = Str(x)

Dim cmd As New SqlCommand("Update Gelände Set " + Feldname + " = @p1, Feldindex =@p2 where gelldfnr = @pIndex", con)

cmd.Parameters.Add("@p1", SqlDbType.NChar, 10, Feldname)
cmd.Parameters.Add("@p2", SqlDbType.NChar, 10, "Feldindex")
Dim prm As SqlParameter = cmd.Parameters.Add("@pindex", SqlDbType.BigInt)
prm.SourceColumn = "gelldfnr"
prm.SourceVersion = DataRowVersion.Original

dagel.UpdateCommand = cmd
dagel.Update(dtgel)

End Sub[ Private Sub datagridview1_down(ByVal sender As Object, ByVal e As Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyUp
Dim x As Integer, y As Integer, Feldname As String = ""

x = Me.DataGridView1.CurrentCell.ColumnIndex
y = Me.DataGridView1.CurrentCell.RowIndex

If e.KeyCode = Keys.Right Then
x = x - 1
Else
x = x
End If

Feldname = Me.DataGridView1.Columns.Item(x).HeaderText.ToString
Me.DataGridView1("Feldindex", y).Value = Str(x)

Dim cmd As New SqlCommand("Update Gelände Set " + Feldname + " = @p1, Feldindex =@p2 where gelldfnr = @pIndex", con)

cmd.Parameters.Add("@p1", SqlDbType.NChar, 10, Feldname)
cmd.Parameters.Add("@p2", SqlDbType.NChar, 10, "Feldindex")
Dim prm As SqlParameter = cmd.Parameters.Add("@pindex", SqlDbType.BigInt)
prm.SourceColumn = "gelldfnr"
prm.SourceVersion = DataRowVersion.Original

dagel.UpdateCommand = cmd
dagel.Update(dtgel)

End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Franki
Datum: 13.03.18 02:28

Hallo,
prüfe doch mal, ob dein
If e.KeyCode = Keys.Right Then
überhaupt aufgerufen wird.

Bei einem Eingabefeld, welcher Art auch immer, sind die beiden Pfeiltasten rechts/links eigentlich dafür gedacht die Eingabe zu editieren und nicht um das Feld zu verlassen.

Denn sonst könntest du bei einer Eingabe von z.B. ABC nicht den Pfeil nach links verwenden um das C zu löschen und dann ein D zu tippen. Dann würde die falsche Eingabe ABC weiter verarbeitet werden anstatt die richtige ABD.

Bei mehrzeiligen Eingabefaldern sollten auch die Cursor Tasten rauf/runter nicht funktionieren, da sie in diesem Fall für das editieren einer anderen Zeile gedacht sind.

Was für eine spezielle Anforderung hast du denn, dass du auf die Pfeiltasten reagieren möchtest? Üblich ist das nicht, wenn Engaben rein per Tastatur gemacht werden ist meistens die TAB Taste für den Wechsel zuständig, oder die ENTER Taste je nach Anforderung. Das kennen 99% der User, man sollte davon auch nicht ohne guten Grund abweichen.

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

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Güldner1
Datum: 13.03.18 08:18

Hallo Frank,

danke für Deine Rückmeldung.

Es geht um die Erfassung von Ergebnissen bei Reitturnieren. Man muss sich das so vorstellen, dass zeitgelich 2 - 3 Reiter auf einer Strecke sind. Die Reiter bilden die Zeilenköpfe. Auf dieser Strecke befinden sich bis zu 50 Hindernisse. Die Hindernisse sind die Spaltenköpfe. Pro Hindernis/Reiter findet ein Eireignis statt: 0 = Kein Fehler, R= 1.Verweigerung, RR zweite Verweigrung; SR = Sturz Reiter, SP = Sturz Pferd usw. Da die Eingabe rasch erfolgen muss, ist jegliche zusätzliche Tastenutzung wie z. B. Enter ein Zeifresser.
Bespiel: Reiter 1 ist bei Hindernis 10, Reiter 2 bei Hindernis 6 und Reiter 3 bei Hindernis 2. Über Funk wird mitgeteilt, dass Reiter 1 eine Verweigerung bei 10 hat und zeitleich Reiter 3 Hindernis 2 problemlos übersprungen hat. Dann gehe ich mit der Pfeiltaste in Reiter 1 bei Sprung 10, tippe dort R ein, drücke dann 2 mal Pfeilnach unten taste und gehe in Zeile 3 zu Sprung 2 und gebe dort 0 ein.
Dabei sollen dann die Ergebnisse in dem Fall R und 0 abgespeichert werden. Wie gesagt bei Pfeil runter und hoch geht es, nur nich bei rechts und links.

Bin da etwas ratlos momentan.
Freue mich auf Deine Rückmeldung.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Güldner1
Datum: 13.03.18 08:22

Hallo Frank

noch eine Frage zur Editierung. Wie mache ich das wenn ich hier im Forum Codeschnipsel posten möchte. Bei Dir sieht das sauber editiert aus. Vermute muss unten die Taste VB-Code drücken. Aber klappen tut es nicht. Danke hierfür schon mal.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Manfred X
Datum: 13.03.18 09:17

Hallo!

Einige allgemeine Hinweise:

Das Net-Framework stellt eine ungeheuere Vielzahl von Klassen bereit,
durch deren Anwendung stabile und leicht zu pflegende Windows-Programme
ermöglicht werden sollen.
Der Haken: Man muß sich in den Gebrauch dieser Klassen einarbeiten und
- mehr noch - man muß die dahinterstehenden Konzepte begriffen haben.
Es kommt sonst zu einem Gegeneinander dessen, was man selbst programmiert
hat und den Methoden, die innerhalb dieser Klassen an der Arbeit sind.

In Deinem Fall wird das schon deutlich.
Das Datagridview-Control beinhaltet eine umfangreiche Funktionalität,
die man verstehen und nutze - aber sinnvollerweise nicht ignorieren und
eigene Vorstellungen dagegen setzen kann.
Franki hat dazu bereits Wichtiges mitgeteilt.
Für Deinen Zweck ist dieses Control kaum brauchbar.

Das gilt auch für die von Dir gewählte Organisation des Datenbankzugriffs.
Bei jedem Click ein Datenbank-Update durchzuführen, widerspricht völlig den
Konzepten, die im Framework angeboten werden (z.B. in-memory-DB).
Informiere Dich auch über das Konzept von Using-Blöcken / Dispose.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Franki
Datum: 14.03.18 03:18

Hallo,
ich verstehe was du erreichen möchtest. Aber:

Zitat:


Bespiel: Reiter 1 ist bei Hindernis 10, Reiter 2 bei
Hindernis 6 und Reiter 3 bei Hindernis 2. Über Funk wird
mitgeteilt, dass Reiter 1 eine Verweigerung bei 10 hat und
zeitleich Reiter 3 Hindernis 2 problemlos übersprungen hat.
Dann gehe ich mit der Pfeiltaste in Reiter 1 bei Sprung 10,
tippe dort R ein, drücke dann 2 mal Pfeilnach unten taste


Dann stehst du aber in Zeile(Reiter)3 immer noch bei Spalte(Hindernis) 10

Zitat:


und gehe in Zeile 3 zu Sprung 2


Wie genau gehst du denn von Hindernis 10 zu Hindernis 2?
8 mal die Pfeiltaste, mit der Maus reinklicken? Und was passiert bei dir wenn du von Reiter 1 mit Pfeiltaste zu reiter 3 wechselst bei Reiter 2 wo ja der Fokus auch zwischendurch ist.

Zitat:


Dabei sollen dann die Ergebnisse in dem Fall R und 0
abgespeichert werden. Wie gesagt bei Pfeil runter und hoch
geht es, nur nich bei rechts und links.


Das sieht nur so aus als ob es funktioniert. Aber du baust dir etwas was ständig speichert, egal ob da was drin steht in den entsprechenden Zellen oder nicht. Da hat ManfredX schon recht, dass das nicht der ideale Weg ist.

Und Zusatzfrage: Warum muss eigentlich sofort gespeichert werden, reicht es nicht aus nach Ende des Turniers also wenn alle Reiter alle Hindernisse passiert haben zu speichern? Ich glaube nicht, dass zwischendurch auf die Daten überhaupt irgendwie zugegriffen wird.

Und ein Zeitfresser bei der Eingabe ist es auch nicht, denn ob z.B. Tab oder Pfeil rechts verwendet wird ist jeweils nur eine Taste. Die Pfeiltasten sind halt bei Eingaben überlicherweise anders reserviert.

Du könntest auch eine Buchstabenkombination verwenden wie bei manchen PC Spielen. a für links, s für runter, d für rechts und e für rauf z.B. Dürfte natürlich nicht mit deinen Eingabekürzeln kollidieren.

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

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Franki
Datum: 14.03.18 03:22

Hallo,
deine Vermutung ist richtig, dafür wird die VB-Code Schaltfläche verwendet. Dann erscheint ein code/code mit jeweils eckigen KLammern drum herum und dazwischen kannst du dann deinen Code einfügen. Oder wenn du deinen Quelltext schon hast, kannst du die Tags auch per Hand schreiben.

Was genau funktioniert denn bei dir nicht?

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

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Güldner1
Datum: 14.03.18 20:32

Hallo Frank

danke für Deine Rückmeldung.

Ja du hast richtig erkannt, wenn ich dann von Reiter 1 auf Reiter 3 gehe, soll das System erkennen, dass der letzte Eintrag bei Sprung 2 war und somit automatisch der Cursor in Sprung 3 steht. Dies bekomme ich schon hin und funktioniert auch.

Aber das speichern....

Hintergrund warum sofort abgespeichert werden muss ist, dass es auch Anzeigemonitore für Ansager gibt. Die müssen immer über den aktuellen Stand der Dinge informiert sein. Deshalb muss bei jeder Eingabe auch ein Abspeichern in der Datenbank erfolgen

Ich habe ein Button auf das DGV angelegt und habe dann fest verdahtet dass jeweilige Hinderniss in dem Update Befehl geschrieben, dann funktionert es. Aber ich habe keine Lust bei 50 Sprüngen eine Schleife durchlaufen zu lassen die alle 50 Spalten abgleicht, wenn ich doch noch eine Spalte brauche die dann upgedatet werden soll.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Franki
Datum: 15.03.18 03:41

Hallo,
Zitat:


Ja du hast richtig erkannt, wenn ich dann von Reiter 1 auf
Reiter 3 gehe, soll das System erkennen, dass der letzte
Eintrag bei Sprung 2 war und somit automatisch der Cursor in
Sprung 3 steht. Dies bekomme ich schon hin und funktioniert
auch.


So hatte ich das zwar nicht erkannt, dass der Cursor schon automatisch im richtigen Feld steht wenn du den Reiter/Zeile mit den Pfeiltasten wechselst.
Aber dadurch ersparst du die ja die Pfeiltasten für rechts/links, kannst also z.B. Enter oder was anderes nehmen.

Zitat:


Ich habe ein Button auf das DGV angelegt und habe dann fest
verdahtet dass jeweilige Hinderniss in dem Update Befehl
geschrieben, dann funktionert es. Aber ich habe keine Lust
bei 50 Sprüngen eine Schleife durchlaufen zu lassen die alle
50 Spalten abgleicht, wenn ich doch noch eine Spalte brauche
die dann upgedatet werden soll.


... das jeweilige Hindernis (z.B. Reiter 1 Hindernis 3) schreibst du im Update in die DB damit ist doch sofort für die Anzeigemonitor der neue Wert ersichtlich. Ein Wert hat sich geändert, einer wird gespeichert. Warum mußt du beim Update alle 50 Spalten abgleichen und mit was?

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

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Güldner1
Datum: 15.03.18 08:21

Hallo Frank.

habe die Lösung. IN dem ich bei dem Ereignis Key.Up festgestellt habe, dass beim Drücken der Pfeil nach unten bzw. oben Taste es funktioniert, habe ich bei dem gleichen Ereignes beim Drücken der Pfeil nach rechts taste, das System gesagt es soll erst eine Zeile runter (anderer Reiter) und dann wieder in die aktuelle Zeile (Aktueller Reiter) gehen und eine Spalte (Sprung) weiter gehen.
    Private Sub datagridview1_down(ByVal sender As Object, ByVal e As _
      Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyUp
 
        Dim x As Integer, y As Integer, Feldname As String = "", Wert As String
        x = Me.DataGridView1.CurrentCell.ColumnIndex
        y = Me.DataGridView1.CurrentCell.RowIndex
 
 
 
        Feldname = Me.DataGridView1.Columns.Item(x).HeaderText.ToString
        Me.DataGridView1("Feldindex", y).Value = Str(x)
        If e.KeyCode = Keys.Right Then
            x = x - 1
            Feldname = Me.DataGridView1.Columns.Item(x).HeaderText.ToString
            Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(y + 1).Cells(x)
            Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(y).Cells(x + 1)
        End If
 
        Dim cmd As New SqlCommand("Update Gelände Set " + Feldname + " = @p1," & _
          "Feldindex =@p2 where gelldfnr = @pIndex", con)
 
        cmd.Parameters.Add("@p1", SqlDbType.NChar, 10, Feldname)
        cmd.Parameters.Add("@p2", SqlDbType.NChar, 10, "Feldindex")
        Dim prm As SqlParameter = cmd.Parameters.Add("@pindex", _
          SqlDbType.BigInt)
        prm.SourceColumn = "gelldfnr"
        prm.SourceVersion = DataRowVersion.Original
 
        dagel.UpdateCommand = cmd
        dagel.Update(dtgel)
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zellenwerte im Datagridview abspeichern Pfeiltasten 
Autor: Franki
Datum: 21.03.18 02:16

Hallo,

Zitat:


habe ich bei dem gleichen Ereignes beim Drücken der Pfeil nach rechts taste, dem System gesagt es soll erst eine Zeile runter (anderer Reiter) und
dann wieder in die aktuelle Zeile (Aktueller Reiter) gehen
und eine Spalte (Sprung)


Na ja, das mag funtionieren, ist aber irgendwie so wie den Nippel durch die Lasche... (Mike Krüger vor seinem uralten Song der aber sehr erfolgreich war.

Man kann Probleme auch lösen wenn man nur einen Hammer zur Verfügung hat jede Schraube auch irgendwie an ihr Ziel hämmern kann. Oder umgekehrt.

Das funktioniert zwar irgenwie, wenn es den Anforderungen entspricht is es gut aber wenn es um "Schulmedizin" geht ist das der falsche Weg.

Was du da machst hat mit sauberer Logik rein gar nichts zu tun. Aber wenn es so funktioniert wie gewünscht, dann mach es halt so, das Ergebnis ist ja entscheidend, dir geht es ja nicht um optimale Umsetzung ...

Gruß
Frank

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

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

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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

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