I have added a DataGrid to my form and it seems to be working well apart from when I add a row, save the changes and then attempt to delete a row, i get a Concurrency Violation with the DeleteCommand.
Any help would be much appreciated.
My Code:
My XAML:
Any help would be much appreciated.
My Code:
VB.NET:
[COLOR=blue]
[/COLOR]Imports System.Data
Public Class Window2
Dim customerdataset As New TB_DatabaseDataSet
Dim customeradapter As New TB_DatabaseDataSetTableAdapters.IngredientsTableAdapter
Dim customermanager As New TB_DatabaseDataSetTableAdapters.TableAdapterManager
Dim myView As CollectionView
Private Sub Window2_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Me.customeradapter.Fill(Me.customerdataset.Ingredients)
Me.DataContext = Me.customerdataset.Ingredients
Me.myView = CollectionViewSource.GetDefaultView(Me.customerdataset.Ingredients)
DataGrid1.ItemsSource = Me.myView
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnAdd.Click
Dim row = Me.customerdataset.Ingredients.NewIngredientsRow
Me.customerdataset.Ingredients.AddIngredientsRow(row)
Me.myView.MoveCurrentToLast()
DataGrid1.UpdateLayout()
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnSave.Click
Try
If Me.customerdataset.HasChanges Then
Me.customeradapter.Update(Me.customerdataset)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnDelete_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnDelete.Click
Dim result As MessageBoxResult = Microsoft.Windows.Controls.MessageBox.Show("If you select Yes you will not be able to Undo" & vbCrLf & vbCrLf & "Are You Sure?", "Delete Record?", MessageBoxButton.YesNo, MessageBoxImage.Question)
Dim msgboxdel As MessageBoxResult
If result = MessageBoxResult.Yes Then
MsgBox(myView.Count)
If Me.myView.CurrentPosition > -1 Then
Dim row = CType(Me.myView.CurrentItem, DataRowView)
row.Delete()
Try
If Me.customerdataset.HasChanges Then
Me.customeradapter.Update(Me.customerdataset)
msgboxdel = MessageBox.Show("The record has been removed from the database!", "Record Deleted", MessageBoxButton.OK, MessageBoxImage.Information)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Else
End If
MsgBox(myView.Count)
DataGrid1.Items.Refresh()
End Sub
Private Sub DataGrid_LoadingRow(sender As System.Object, e As System.Windows.Controls.DataGridRowEventArgs)
e.Row.Header = (e.Row.GetIndex()) + 1.ToString()
End Sub
End Class
My XAML:
VB.NET:
<DataGrid AutoGenerateColumns="False" Height="450" HorizontalAlignment="Left" Name="DataGrid1" VerticalAlignment="Top" Width="500" Margin="15" LoadingRow="DataGrid_LoadingRow" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="NameColumn" Binding="{Binding Path=Name}" Header="Name" Width="150" CanUserSort="True" />
<DataGridTextColumn x:Name="Pack_SizeColumn" Binding="{Binding Path=Pack_Size}" Header="Pack Size" Width="100" />
<DataGridTextColumn x:Name="PriceColumn" Binding="{Binding Path=Price}" Header="Price" Width="100" />
<DataGridTextColumn x:Name="Unit_PriceColumn" Binding="{Binding Path=Unit_Price}" Header="Unit Price" Width="100" />
</DataGrid.Columns>
</DataGrid>
Last edited: