Code:
'class ... inherits windows.forms.datagrid
Public Shadows Sub CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.CurrentCellChanged
Dim tblStl As DataGridTableStyle = Me.GetCurrentTableStyle(Me.DataSourceTable.TableName.ToString)
'setujemo zadnji pravac kretanja u gridu
If (Me.LastCell.RowNumber <> Me.CurrentCell.RowNumber) And (Me.LastCell.ColumnNumber <> Me.CurrentCell.ColumnNumber) Then
pLastMoveDirection = MoveDirection.UpDownLeftRight
ElseIf (Me.LastCell.RowNumber <> Me.CurrentCell.RowNumber) Then
pLastMoveDirection = MoveDirection.UpDown
ElseIf (Me.LastCell.ColumnNumber <> Me.CurrentCell.ColumnNumber) Then
pLastMoveDirection = MoveDirection.LeftRight
ElseIf Me.LastCell.Equals(Me.CurrentCell) Then
pLastMoveDirection = MoveDirection.ErrorMoveBack
End If
If TypeOf Me.DataSource Is DataView Then
'kada je datasource - dataview ovog grida u stanju dodavanja novog reda, podešavamo stil datagrida da bude readonly, inače ne.
If Me.DataSource.Item(Me.CurrentRowIndex).isNew Then
If Not tblStl Is Nothing Then
tblStl.ReadOnly = True
Else
MsgBox("CurrCellChangedUpdateDataGrid.CurrentCellChanged()" & vbCrLf & "Datagrid nema definisan 'DataGridTableStyle' sa mappingName = " & Me.DataSourceTable.TableName.ToString & vbCrLf & "Moguće greške u predvidjenom ponašanju datagrida.", MsgBoxStyle.Exclamation, "Exception")
End If
RaiseEvent Update_on_Current_Cell_Changed(Me.ErrorOnUpdate)
Me.CurrentCell = Me.LastCell
Exit Sub
Else 'datasource je dataview, nismo u 'isnew' modu, vreme je za validaciju kolone i moguci update
If Not ((Me.LastRowState Is Nothing) And (Me.LastColState Is Nothing)) Then
Select Case pLastMoveDirection
'krecemo se gridu gore-dole
Case MoveDirection.UpDown, MoveDirection.UpDownLeftRight
'menjali smo neki red
If (Not Me.LastRowState Is Nothing) Then
'poslednji menjani red nema gredaka
If Not Me.LastRowState.Row.HasErrors Then
'dizemo dogadjaj za update baze
RaiseEvent Update_on_Current_Cell_Changed(Me.ErrorOnUpdate)
'ako se desila neka greska prilikom update-a, moramo da se vratimo na staru celiju
'pogledati uputstvo za koriscenje ove klase na pocetku same klase vezano za update
If Me.ErrorOnUpdate Then
Me.CurrentCell = Me.LastCell
'dizemo dogadjaj za prijavljivanje greske prilikom update-a
RaiseEvent Respond_On_Row_Update_Error(Me.ErrorOnUpdate)
Exit Sub
End If
Else 'zadnji menjani red ima gresku reda
Me.CurrentCell = Me.LastCell
'dizemo dogadjaj za prijavljivanje greske reda
RaiseEvent Respond_On_Row_Edit_Error(Me.LastRowState)
Exit Sub
End If
End If
Case MoveDirection.LeftRight
''ovaj if se koristi ukoliko se korisnik posle neuspesnog update-a vratio na staru celiju i seta se samo levo - desno.
'If Not Me.LastRowState Is Nothing Then
' If Me.LastRowState.Row.HasErrors Then
' Me.CurrentCell = Me.LastCell
' RaiseEvent Respond_On_Row_Edit_Error(Me.LastRowState)
' Exit Sub
' End If
'End If
'ovaj if se koristi ukoliko imamo greske na nekoj koloni posle setnje levo - desno
If Not Me.LastColState Is Nothing Then
If Me.LastColState.Row.GetColumnsInError.Length > 0 Then
Me.CurrentCell = Me.LastCell
RaiseEvent Respond_On_Column_Edit_Error(Me.LastColState)
Exit Sub
End If
End If
Case Else
End Select
End If
'ukoliko smo se uspesno pomerili na sledecu celiju bez editovanja, omogucavamo editovanje grida
'to je zbog toga sto je readonly = true kad smo u dataview-u u isNew modu.
If Not tblStl Is Nothing Then
tblStl.ReadOnly = False
End If
End If
'pomerili smo se posle promene celije na sledecu, pa cemo za ubuduce pamtiti staru celiju
Me.LastCell = Me.CurrentCell
Else
MsgBox("CurrCellChangedUpdateDataGrid.CurrentCellChanged()" & vbCrLf & "DataSuorce DataGrid-a je tabela dataSet-a, a ne DataView." & vbCrLf & "Moguće greške u predvidjenom ponašanju datagrida.", MsgBoxStyle.Exclamation, "Exception")
End If
End Sub
'class ... inherits windows.forms.datagrid
Public Shadows Sub CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.CurrentCellChanged
Dim tblStl As DataGridTableStyle = Me.GetCurrentTableStyle(Me.DataSourceTable.TableName.ToString)
'setujemo zadnji pravac kretanja u gridu
If (Me.LastCell.RowNumber <> Me.CurrentCell.RowNumber) And (Me.LastCell.ColumnNumber <> Me.CurrentCell.ColumnNumber) Then
pLastMoveDirection = MoveDirection.UpDownLeftRight
ElseIf (Me.LastCell.RowNumber <> Me.CurrentCell.RowNumber) Then
pLastMoveDirection = MoveDirection.UpDown
ElseIf (Me.LastCell.ColumnNumber <> Me.CurrentCell.ColumnNumber) Then
pLastMoveDirection = MoveDirection.LeftRight
ElseIf Me.LastCell.Equals(Me.CurrentCell) Then
pLastMoveDirection = MoveDirection.ErrorMoveBack
End If
If TypeOf Me.DataSource Is DataView Then
'kada je datasource - dataview ovog grida u stanju dodavanja novog reda, podešavamo stil datagrida da bude readonly, inače ne.
If Me.DataSource.Item(Me.CurrentRowIndex).isNew Then
If Not tblStl Is Nothing Then
tblStl.ReadOnly = True
Else
MsgBox("CurrCellChangedUpdateDataGrid.CurrentCellChanged()" & vbCrLf & "Datagrid nema definisan 'DataGridTableStyle' sa mappingName = " & Me.DataSourceTable.TableName.ToString & vbCrLf & "Moguće greške u predvidjenom ponašanju datagrida.", MsgBoxStyle.Exclamation, "Exception")
End If
RaiseEvent Update_on_Current_Cell_Changed(Me.ErrorOnUpdate)
Me.CurrentCell = Me.LastCell
Exit Sub
Else 'datasource je dataview, nismo u 'isnew' modu, vreme je za validaciju kolone i moguci update
If Not ((Me.LastRowState Is Nothing) And (Me.LastColState Is Nothing)) Then
Select Case pLastMoveDirection
'krecemo se gridu gore-dole
Case MoveDirection.UpDown, MoveDirection.UpDownLeftRight
'menjali smo neki red
If (Not Me.LastRowState Is Nothing) Then
'poslednji menjani red nema gredaka
If Not Me.LastRowState.Row.HasErrors Then
'dizemo dogadjaj za update baze
RaiseEvent Update_on_Current_Cell_Changed(Me.ErrorOnUpdate)
'ako se desila neka greska prilikom update-a, moramo da se vratimo na staru celiju
'pogledati uputstvo za koriscenje ove klase na pocetku same klase vezano za update
If Me.ErrorOnUpdate Then
Me.CurrentCell = Me.LastCell
'dizemo dogadjaj za prijavljivanje greske prilikom update-a
RaiseEvent Respond_On_Row_Update_Error(Me.ErrorOnUpdate)
Exit Sub
End If
Else 'zadnji menjani red ima gresku reda
Me.CurrentCell = Me.LastCell
'dizemo dogadjaj za prijavljivanje greske reda
RaiseEvent Respond_On_Row_Edit_Error(Me.LastRowState)
Exit Sub
End If
End If
Case MoveDirection.LeftRight
''ovaj if se koristi ukoliko se korisnik posle neuspesnog update-a vratio na staru celiju i seta se samo levo - desno.
'If Not Me.LastRowState Is Nothing Then
' If Me.LastRowState.Row.HasErrors Then
' Me.CurrentCell = Me.LastCell
' RaiseEvent Respond_On_Row_Edit_Error(Me.LastRowState)
' Exit Sub
' End If
'End If
'ovaj if se koristi ukoliko imamo greske na nekoj koloni posle setnje levo - desno
If Not Me.LastColState Is Nothing Then
If Me.LastColState.Row.GetColumnsInError.Length > 0 Then
Me.CurrentCell = Me.LastCell
RaiseEvent Respond_On_Column_Edit_Error(Me.LastColState)
Exit Sub
End If
End If
Case Else
End Select
End If
'ukoliko smo se uspesno pomerili na sledecu celiju bez editovanja, omogucavamo editovanje grida
'to je zbog toga sto je readonly = true kad smo u dataview-u u isNew modu.
If Not tblStl Is Nothing Then
tblStl.ReadOnly = False
End If
End If
'pomerili smo se posle promene celije na sledecu, pa cemo za ubuduce pamtiti staru celiju
Me.LastCell = Me.CurrentCell
Else
MsgBox("CurrCellChangedUpdateDataGrid.CurrentCellChanged()" & vbCrLf & "DataSuorce DataGrid-a je tabela dataSet-a, a ne DataView." & vbCrLf & "Moguće greške u predvidjenom ponašanju datagrida.", MsgBoxStyle.Exclamation, "Exception")
End If
End Sub
Ovaj grid je zamisljen da se podaci proveravaju dok se korisnik seta po jednom redu,
ali cim skoci u novi red da se update-uje baza. Ukoliko je neka greska 'ne pustam' korisnika van celije. U odgovarajucem momentu podizem update dogadjaj i u formi koja ima taj grid radim sledeci update:
Code:
Private Sub DataGrid1_Update_on_Current_Cell_Changed(ByRef ErrorOnUpdate As Boolean) Handles DataGrid1.Update_on_Current_Cell_Changed
If DataGrid1.LastRowState.Row.HasErrors Then
ErrorOnUpdate = True
Else
ErrorOnUpdate = False
Try
SqlDataAdapter1.Update(ds)
ErrorOnUpdate = False
Catch ex As Exception
MsgBox(ex.Message)
Finally
ErrorOnUpdate = True
End Try
End If
End Sub
Private Sub DataGrid1_Update_on_Current_Cell_Changed(ByRef ErrorOnUpdate As Boolean) Handles DataGrid1.Update_on_Current_Cell_Changed
If DataGrid1.LastRowState.Row.HasErrors Then
ErrorOnUpdate = True
Else
ErrorOnUpdate = False
Try
SqlDataAdapter1.Update(ds)
ErrorOnUpdate = False
Catch ex As Exception
MsgBox(ex.Message)
Finally
ErrorOnUpdate = True
End Try
End If
End Sub
Vraca mi se exveption :
Concurrency violation: the UpdateCommand affected 0 records.
ili
could not convert "" to datetime ili tako nesto
Ima li neko resenje?
kopca