using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows;
using System.Windows.Controls;

namespace KURSACH3
{
    public partial class MainWindow : Window
    {
        private string connectionString = "Server=localhost;Database=KURSACH;Integrated Security=True;";

        public MainWindow()
        {
            InitializeComponent();
            LoadMaterials(); // Загружаем материалы при инициализации окна
        }

        private void LoadMaterials()
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand command = new SqlCommand("SELECT * FROM Materials", connection);
                    SqlDataAdapter adapter = new SqlDataAdapter(command);
                    DataTable dataTable = new DataTable();
                    adapter.Fill(dataTable); // Заполняем DataTable данными
                    MaterialsDataGrid.ItemsSource = dataTable.DefaultView; // Привязываем данные к DataGrid
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка загрузки данных: {ex.Message}"); // Обработка ошибок
            }
        }

        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            if (ValidateInput()) // Проверка входных данных
            {
                try
                {
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        SqlCommand command = new SqlCommand("INSERT INTO Materials (MaterialName, Quantity, Price) VALUES (@MaterialName, @Quantity, @Price)", connection);
                        command.Parameters.AddWithValue("@MaterialName", MaterialNameTextBox.Text);
                        command.Parameters.AddWithValue("@Quantity", int.Parse(QuantityTextBox.Text));
                        command.Parameters.AddWithValue("@Price", decimal.Parse(PriceTextBox.Text));

                        connection.Open();
                        command.ExecuteNonQuery(); // Выполнение запроса

                        LoadMaterials(); // Обновление данных
                        ClearInputFields(); // Очистка полей
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка добавления данных: {ex.Message}"); // Обработка ошибок
                }
            }
        }

        private void UpdateButton_Click(object sender, RoutedEventArgs e)
        {
            if (MaterialsDataGrid.SelectedItem == null) return; // Проверка на выделение элемента

            if (ValidateInput()) // Проверка входных данных
            {
                try
                {
                    DataRowView selectedRow = (DataRowView)MaterialsDataGrid.SelectedItem;
                    int id = (int)selectedRow["Id"]; // Получение Id выбранной строки

                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        SqlCommand command = new SqlCommand("UPDATE Materials SET MaterialName = @MaterialName, Quantity = @Quantity, Price = @Price WHERE Id = @Id", connection);
                        command.Parameters.AddWithValue("@Id", id);
                        command.Parameters.AddWithValue("@MaterialName", MaterialNameTextBox.Text);
                        command.Parameters.AddWithValue("@Quantity", int.Parse(QuantityTextBox.Text));
                        command.Parameters.AddWithValue("@Price", decimal.Parse(PriceTextBox.Text));

                        connection.Open();
                        command.ExecuteNonQuery(); // Выполнение запроса

                        LoadMaterials(); // Обновление данных
                        ClearInputFields(); // Очистка полей
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка обновления данных: {ex.Message}"); // Обработка ошибок
                }
            }
        }

        private void DeleteButton_Click(object sender, RoutedEventArgs e)
        {
            if (MaterialsDataGrid.SelectedItem == null) return; // Проверка на выделение элемента

            try
            {
                DataRowView selectedRow = (DataRowView)MaterialsDataGrid.SelectedItem;
                int id = (int)selectedRow["Id"]; // Получение Id выбранной строки

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand command = new SqlCommand("DELETE FROM Materials WHERE Id = @Id", connection);
                    command.Parameters.AddWithValue("@Id", id);

                    connection.Open();
                    command.ExecuteNonQuery(); // Выполнение запроса

                    LoadMaterials(); // Обновление данных
                    ClearInputFields(); // Очистка полей
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка удаления данных: {ex.Message}"); // Обработка ошибок
            }
        }

        private void MaterialsDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (MaterialsDataGrid.SelectedItem != null) // Проверка на выделение элемента
            {
                DataRowView selectedRow = (DataRowView)MaterialsDataGrid.SelectedItem; // Получение выделенной строки
                MaterialNameTextBox.Text = selectedRow["MaterialName"].ToString();
                QuantityTextBox.Text = selectedRow["Quantity"].ToString();
                PriceTextBox.Text = selectedRow["Price"].ToString();
            }
        }

        private bool ValidateInput()
        {
            // Проверка корректности ввода
            if (string.IsNullOrWhiteSpace(MaterialNameTextBox.Text) ||
                !int.TryParse(QuantityTextBox.Text, out _) ||
                !decimal.TryParse(PriceTextBox.Text, out _))
            {
                MessageBox.Show("Пожалуйста, убедитесь, что все поля заполнены корректно.");
                return false;
            }
            return true; // Если все в порядке
        }

        private void ClearInputFields()
        {
            // Очистка полей ввода
            MaterialNameTextBox.Text = string.Empty;
            QuantityTextBox.Text = string.Empty;
            PriceTextBox.Text = string.Empty;
        }
    }
}

<Window x:Class="KURSACH3.MainWindow"
        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:KURSACH3"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="300"/>
        </Grid.ColumnDefinitions>

        <DataGrid Name="MaterialsDataGrid" AutoGenerateColumns="False" Margin="10" SelectionChanged="MaterialsDataGrid_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Id" Binding="{Binding Id}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Material Name" Binding="{Binding MaterialName}" Width="*"/>
                <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" Width="70"/>
                <DataGridTextColumn Header="Price" Binding="{Binding Price, StringFormat=C}" Width="100"/>
            </DataGrid.Columns>
        </DataGrid>

        <StackPanel Grid.Column="1" Margin="10">
            <TextBlock FontSize="18" FontWeight="Bold" Text="Material Management" Margin="0,0,0,10" HorizontalAlignment="Center"/>
            <Label Content="Material Name:"/>
            <TextBox Name="MaterialNameTextBox" Margin="0,0,0,10" Padding="5" />
            <Label Content="Quantity:"/>
            <TextBox Name="QuantityTextBox" Margin="0,0,0,10" Padding="5" />
            <Label Content="Price:"/>
            <TextBox Name="PriceTextBox" Margin="0,0,0,10" Padding="5" />

            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Name="AddButton" Content="Add" Click="AddButton_Click" Margin="5" Padding="10,5" Background="#4CAF50" Foreground="White" Cursor="Hand"/>
                <Button Name="UpdateButton" Content="Update" Click="UpdateButton_Click" Margin="5" Padding="10,5" Background="#2196F3" Foreground="White" Cursor="Hand"/>
                <Button Name="DeleteButton" Content="Delete" Click="DeleteButton_Click" Margin="5" Padding="10,5" Background="#f44336" Foreground="White" Cursor="Hand"/>
            </StackPanel>
        </StackPanel>
    </Grid>
</Window>


1

   USE KURSACH;
SELECT * FROM Materials;

2

   USE KURSACH;

   CREATE TABLE Materials (
       Id INT PRIMARY KEY IDENTITY(1,1),
       MaterialName NVARCHAR(100),
       Quantity INT,
       Price DECIMAL(10, 2)
   );


3
   INSERT INTO Materials (MaterialName, Quantity, Price)
   VALUES 
   ('Asphalt Shingles', 100, 12.50),
   ('Metal Sheets', 50, 20.00),
   ('Tiles', 200, 15.75),
   ('Underlayment', 150, 0.50);


добавь в это приложение уентификатор и роли пользователь, администратор, модератор.