DataGridView / Celle aktivieren

07/09/2007 - 08:32 von Oliver Denter | Report spam
Hallo,

ich habe ein DataGridView, in dem OnLeave Event einer Celle prüfe ich
etwas und möchte ggf. die Celle wieder aktivieren, also den Focus setzen.
Wie mache ich das?

OD
 

Lesen sie die antworten

#1 Peter Götz
07/09/2007 - 10:30 | Warnen spam
Hallo Oliver,

ich habe ein DataGridView, in dem OnLeave Event
einer Celle prüfe ich etwas und möchte ggf. die Celle
wieder aktivieren, also den Focus setzen.
Wie mache ich das?



Für eine Überprüfung (Plausibilitàtsprüfung) von
Zelleinhalten eines DataGridView verwendest Du besser
das CellValidating-Ereignis, da Du dort im Bedarsfalle
e.Cancel = True setzen und somit das Verbleiben in der
soeben geprüften Zelle erzwingen kannst.

Hier mal ein kleines Beispiel:

' /// Code in einer leeren Form1
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents DGV As DataGridView
Private WithEvents mCM As CurrencyManager

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
With DGV
.SetBounds(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom
End With
Me.Controls.Add(DGV)
CreateData()
DGV.DataSource = mDV
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

End Sub

Private Sub DGV_CellValidating _
(ByVal sender As Object, _
ByVal e As DataGridViewCellValidatingEventArgs _
) Handles DGV.CellValidating

If e.ColumnIndex = 0 Then
Dim strBuffer As String
Dim ID As Integer
Dim Row as integer = e.RowIndex

strBuffer = _
DGV.Rows(e.row).Cells(0).EditedFormattedValue.ToString

If Not Integer.TryParse(strBuffer, ID) Then
Dim Msg As String
Msg = _
"Feld ID muss einen Ganzzahlwert (int32) enthalten!" _
& ControlChars.CrLf & ControlChars.CrLf & _
"Geben sie einen numerischen Wert ein oder" _
& ControlChars.CrLf & _
"Drücken Sie 'ESC' um ihre Änderung" & _
" rückgàngig zu machen!"

MsgBox(Msg, MsgBoxStyle.Exclamation)
e.Cancel = True
End If
End If
End Sub
End Class
' \\\ E N T E

Im Feld ID dürfen nur numerische Werte (int32) eingegeben
werden. Werden andere Werte eingegeben oder bleibt das
Feld leer, bekommt der Benutzer die entspr. MsgBox und
kann dann seine Eingabe berichtigen oder per ESC-Taste
den ursprünglichen Zustand der Zelle wieder herstellen.

Mehr Beispiele zu DataGridView findest Du unter

www.gssg.de -> Visual Basic -> VB.net


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen