Hi Dieter,
hier kommt es auch schon...
Benötigt werden eine DB (db1.mdb) mit Tabelle1 mit den Feldern Key und Text.
Des weiteren ein Form mit SevDataGrid2 (SevGrid1) und einem Button (Command1, Caption="AddNew".
Und folgender Code:Option Explicit
Private db As DAO.Database
Private DoRefresh As Boolean
Private Sub Command1_Click()
With sevGrid1
.AddNew
End With
End Sub
Private Sub Form_Load()
Set db = DBEngine.OpenDatabase(App.Path & "\db1.mdb")
With sevGrid1
.DataMode = Mode_Recordset
.CreateClone = True
.AllowEdit = True
.AllowDelete = True
Set .Recordset = db.OpenRecordset("SELECT * FROM Tabelle1 ORDER BY" & _
"Text;")
.Refresh
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
db.Close
End Sub
Private Sub sevGrid1_AfterAddNew()
GridRefresh 'funzt immer
End Sub
Private Sub sevGrid1_AfterCellEdit(nRow As Long, nCol As Long, ByVal sText As _
String)
If DoRefresh Then
'Vorher gab's keine Gelegenheit, also versuche es jetzt
DoRefresh = False
GridRefresh
End If
End Sub
Private Sub sevGrid1_AfterUpdate(ByVal nRow As Long, ByVal nCol As Long, ByVal _
sText As String)
If sevGrid1.IsEditMode = MODE_NONE Then
GridRefresh 'funzt nur wenn nicht im edit mode
Else
'ansonsten verschieb's auf das AfterCellEdit-event,
'aber nur, wenn es keine neue Zeile ist
If sevGrid1.IsEditMode = MODE_EDIT Then
DoRefresh = True
End If
End If
End Sub
Private Sub sevGrid1_ErrorAddNew(ByVal nError As Long, ByVal sDescription As _
String)
MsgBox "Fehler " & nError & ": " & vbLf & sDescription, vbCritical, "Fehler"
End Sub
Private Sub sevGrid1_ErrorUpdate(ByVal nRow As Long, ByVal nCol As Long, ByVal _
sText As String, ByVal nError As Long, ByVal sDescription As String)
MsgBox "Fehler " & nError & ": " & vbLf & sDescription, vbCritical, "Fehler"
End Sub
Private Sub GridRefresh()
With sevGrid1
Set .Recordset = db.OpenRecordset(.Recordset.Name)
.Refresh
End With
End SubZiel ist, dass die Sub GridRefresh() immer ausgeführt wird, nachdem eine neue Zeile hinzugefügt, oder eine bestehende editiert wurde, damit der ORDER-BY-Abschnitt im Select-Statement wieder greift.
Funktioniert in den meisten Fällen auch prima, nur wenn man eine bestehende Zeile editiert und dann die Zeile mit TAB verlässt, kommt es zum Grafik-Chaos (verursacht im AfterCellEdit-Ereignis, weil EditMode immer noch = Mode_Edit).
Gruß!
reinski
Immer noch auf der Suche nach dem "Tu's trotzdem"-Button...  |