| |

Fragen & Antworten rund um sev-KomponentenSevDataGrid2 AfterCellEdit | |  | Autor: AndiSW | Datum: 10.12.04 16:36 |
| Hallo Leute,
SevDataGrid 2 unter Access XP/DAO.
Folgende Wunschvorstellung macht Probleme:
Ich zeige in Spalte "Rabatt" einen Kundenrabatt in % an und in Spalte "RabattBetrag" den Kundenrabatt als Betrag in Euro . Der User soll die Möglichkeit haben entweder hier oder dort seinen Eintrag zu setzen, die andere Spalte wird dann jeweíls automatisch umgerechnet.
Damit dieser Automatismus sowohl bei Änderung von DS als auch beim Hinzufügen von neuen DS klappt, muss ich zwei Grid-Ereignisse nutzen. Einmal AfterCellEdit (nur für Modus AddNew) und einmal AfterUpdate (bei Änderungen)
verkürzter Code wie folgt:
Private Sub Grid1_AfterCellEdit(nRow As Long, nCol As Long, ByVal sText As String)
With Grid1
If .IsEditMode = 2 Then ' MODE_ADDNEW
If nCol = .GetCol("RabattProzent") Then 'falls Änderung bei Rabatt in %
' Rabatt Betrag ausrechnen und eintragen
.CellNew("RabattBetrag") = CStr((CCur(sText) / 100) * Me!ArtikelPreis)
End If
If nCol = .GetCol("RabattBetrag") Then 'falls Änderung bei Rabatt in EURO
' Rabatt in % ausrechnen und eintragen
.CellNew("RabattProzent") = CStr((CCur(sText) * 100) / Me!ArtikelPreis)
End If
End If
End With
End Sub
Private Sub Grid1_AfterUpdate(ByVal nRow As Long, ByVal nCol As Long, _
ByVal sText As String)
With Grid1
If nCol = Grid1.GetCol("RabattProzent") Then 'falls Änderung bei Rabatt in %
' Rabatt Betrag ausrechnen und eintragen
.Recordset.Edit
.Recordset.Fields("RabattBetrag") = (CCur(sText) / 100) * Me!Artikelpreis
Recordset.Update
End If
If nCol = Grid1.GetCol("RabattBetrag") Then 'falls Änderung bei RabattBetrag
' Rabatt in % ausrechnen und eintragen
.Recordset.Edit
.Recordset.Fields("RabattProzent") = (CCur(sText) * 100) / (Me!ArtikelPreis)
'Update
.Recordset.Update
End If
End With
End Sub
Klappt soweit ganz gut. Allerdings wird durch das AfterCellEdit bei RabattProzent nicht nur der Wert in Spalte RabattBetrag gesetzt, sondern dort ebenfalls wieder das AfterCellEdit-Ereignis ausgelöst.
Das passiert GottseiDank nur 1x und nicht als Endlosschleife, führt allerdings auch hier schon zu hässlichen Rundungsfehlern. Das heißt, der User gibt z.B. 15,0% Rabatt ein, der Rabattbetrag in EURO wird berechnet, ergibt ne krumme Zahl z.B. 4,46 und plötzlich steht bei Rabatt 15,1%, weil der Wert durch das zweite AfterCellEdit in Spalte RabattBetrag neu berechnet wurde.
Beim AfterUpdate klappt alles wie gewünscht, dort wird die automatische Berechnung ja nur 1x gestartet.
Schöner wäre natürlich, wenn ich insgesamt nur ein Ereignis dazu bräuchte.
Ich hoffe, ich habe mein Problem verständlich geschildert. Wer weiss eine bessere Lösung?
Andreas |  |
 SevDataGrid2 AfterCellEdit | 847 | AndiSW | 10.12.04 16:36 |
 | 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 |
  |
|
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 InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 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
|
|