Как программно добавить новую строку в 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 эту строку перед записью отредактировать, то изменения также не запишутся. Помогите разобраться, пожалуйста.


Ответы (0 шт):