I am trying to commit changes from a WPF datagrid databound to a microsoft SQL server database via a DataSources table adapter, but I am getting an 'Update requires a valid UpdateCommand' error. I know the DataSources wizard is fairly restricted, but it has correctly created an INSERT statement.
INSERT INTO PartRevisions
(imrPartID, imrPartRevisionID, imrShortDescription, imrLastMaterialCost)
VALUES (@imrPartID,@imrPartRevisionID,@imrShortDescription,@imrLastMaterialCost)
Here is my test code.
namespace WPFtest2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private WPFtest2.M1DataSet m1DataSet = new M1DataSet();
private WPFtest2.M1DataSetTableAdapters.PartRevisionsTableAdapter m1DataSetPartRevisionsTableAdapter = new WPFtest2.M1DataSetTableAdapters.PartRevisionsTableAdapter();
private System.Windows.Data.CollectionViewSource partRevisionsViewSource = new CollectionViewSource();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
m1DataSet = ((WPFtest2.M1DataSet)(this.FindResource("m1DataSet")));
// Load data into the table PartRevisions. You can modify this code as needed.
m1DataSetPartRevisionsTableAdapter.Fill(m1DataSet.PartRevisions);
System.Windows.Data.CollectionViewSource partRevisionsViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("partRevisionsViewSource")));
}
private void partRevisionsDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
try
{
int rc = 0;
rc = m1DataSetPartRevisionsTableAdapter.Update(m1DataSet.PartRevisions);
MessageBox.Show("Row updated");
}
catch (Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
}
}
}
}
and the XAML code
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFtest2"
xmlns:M1DataSetTableAdapters="clr-namespace:WPFtest2.M1DataSetTableAdapters" x:Class="WPFtest2.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Window.Resources>
<local:M1DataSet x:Key="m1DataSet"/>
<CollectionViewSource x:Key="partRevisionsViewSource" Source="{Binding PartRevisions, Source={StaticResource m1DataSet}}"/>
</Window.Resources>
<Grid >
<DataGrid
x:Name="partRevisionsDataGrid"
AutoGenerateColumns="False"
EnableRowVirtualization="True"
ItemsSource="{Binding}"
RowDetailsVisibilityMode="VisibleWhenSelected"
DataContext="{StaticResource partRevisionsViewSource}"
RowEditEnding = "partRevisionsDataGrid_RowEditEnding">
<DataGrid.Columns>
<DataGridTextColumn x:Name="imrPartIDColumn" Binding="{Binding imrPartID}" Header="imr Part ID" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="imrPartRevisionIDColumn" Binding="{Binding imrPartRevisionID}" Header="imr Part Revision ID" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="imrLastMaterialCostColumn" Binding="{Binding imrLastMaterialCost, Mode=TwoWay}" Header="imr Last Material Cost" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="imrShortDescriptionColumn" Binding="{Binding imrShortDescription}" Header="imr Short Description" Width="SizeToHeader"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
It also seems the RowEditEnding event doesn't have the updated row data, as the error does not occur until I edit a second row.