Как программно добавить новую строку в WPF DataGrid?
коллеги! Не могу разобраться, как программно добавить новую строку в WPF DataGrid. Имею таблицу в MSSQL:
Работаю с ней в С# как с объектом.
<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:MyShop3" mc:Ignorable="d" x:Class="MyShop3.MainWindow"
Title="MainWindow" Height="457" Width="587" Loaded="Window_Loaded_1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="207*"/>
<RowDefinition Height="32*"/>
<RowDefinition Height="153*"/>
<RowDefinition Height="35*"/>
</Grid.RowDefinitions>
<DataGrid x:Name="customerDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="False" ItemsSource="{Binding}" Margin="12,16,10,0" RowDetailsVisibilityMode="VisibleWhenSelected" Height="181" VerticalAlignment="Top" SelectionChanged="customerDataGrid_SelectionChanged" RowBackground="White" AlternatingRowBackground="LightGray" RowHeight="70">
<DataGrid.Columns>
<DataGridTextColumn x:Name="ageColumn" Binding="{Binding Age}" Header="Age"/>
<DataGridTemplateColumn x:Name="birthdayColumn" Header="Birthday" Width="SizeToHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Birthday, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn x:Name="customerIDColumn" Binding="{Binding CustomerID}" Header="Customer ID" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="incomeColumn" Binding="{Binding Income}" Header="Income" Width="SizeToHeader"/>
<DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="50">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridCheckBoxColumn x:Name="TestColumn" Binding="{Binding Test}" Header="Test" SortMemberPath="Test"/>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="tectButton" Content="Проба" HorizontalAlignment="Left" Margin="184,10,0,0" Grid.Row="3" VerticalAlignment="Top" Width="75" Click="tectButton_Click"/>
</Grid>
public partial class MainWindow : Window
{
ObservableCollection<Customer> customerObservableCollection;
private MyShop3DataContext m_ctx = new MyShop3DataContext();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
DataContext = customerObservableCollection = new ObservableCollection<Customer>(m_ctx.Customer);
}
private void SaveChangeOrder_Click(object sender, RoutedEventArgs e)
{
m_ctx.SubmitChanges();
}
private void tectButton_Click(object sender, RoutedEventArgs e)
{
customerObservableCollection.Add(new Customer { Name = "Василий", Age = 111 });
}
}
При нажатии на кнопку tectButton новая строка появляется в DataGrid, но при выполнении команды SubmitChanges() в БД не записывается. Также при нажатии на Delete строка в DataGrid удаляется, но при выполнении команды SubmitChanges() в БД изменения не записываются. Редактирование строки работает без проблем. Попрбовал записать так:
customerObservableCollection.Add(new Customer { Name = "Привет Петя!!!", Age = 111 });
m_ctx.Customer.InsertOnSubmit(new Customer { Name = "Привет Петя!!!", Age = 111});
Теперь строка в БД записывается. Но если в DataGrid эту строку перед записью отредактировать, то изменения также не запишутся. Помогите разобраться, пожалуйста.
