e.cancel = true, zamezí opuštění buňky. Tím sice zamezím opuštění v případě chyby ale nemohu zadanou chybnou hodnotu nejdříve smazat. DGW_PSO.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 0 prostě vb.net ignoruje pokud se jedná o aktuální právě editovanou buńku. Stejně tak i vlastnost currentcell. Takže pokud bych chtěl ošetřit chybu při zadání např. písmene místo čísla. Musel bych e.cancel = true zrušit resp. povolit opuštění buňky změnit hodnotu předchozí chybně zadané buňky na 0 nebo "" nebo nothing ? a vrátit se do ní. Jenže pořád nemůžu najít metodu jako byl ve VB6 select, která mi vybere aktuální buňku na základě mnou zvolené indexové adresy, kterou sitřeba uložím do dvou proměnných x a y. Můžu změnit hodnotu v libovolné buňce, ale jak z ní "udělat" aktuální vybranou buňku na to nemohu přijít ? Pak mě napadá to řešit přes textbox, kde se dá perfektně kontrolovat na úrovni jednotlivých znaků zadání uživatele. Např. povolit jen zadání číselných hodnot, případně použít NumericUpDown, ale to bych zase musel před datagridview "podstrkávat" jiné ovládací prvky a přijde mi to zbytečné pokud tedy podobné problémy umí řešit i buňka v datagridview. Jenže to zase nevím co se dá s buńkou v datagridview dělat. Přijdou mi zatím možnosti buňky velice omezené a na MSDN jsem o tom taky moc nenašel
Private Sub DGW_PSO_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DGW_PSO.CellValidating
If e.ColumnIndex > 1 Then
If IsNumeric(e.FormattedValue) Or e.FormattedValue = Nothing Then
Me.DGW_PSO.Rows(e.RowIndex).ErrorText = ""
Else
Me.DGW_PSO.Rows(e.RowIndex).ErrorText = "Chybné zadání"
DGW_PSO.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "" 'nereaguje na změnu !!!
MsgBox("Je nutné zadat kladnou číselnou hodnotu", MsgBoxStyle.Information, "Chybné zadání")
e.Cancel = True
End If
End If
End Sub
|