Нет описания

vyakimova 7a62b98409 хомяк инженер 6 месяцев назад
.idea dd78004f9b baobab 8 месяцев назад
img 7a62b98409 хомяк инженер 6 месяцев назад
gitignore.txt b1eb6d37ef что это 10 месяцев назад
readme.md 7a62b98409 хомяк инженер 6 месяцев назад

readme.md

Получение данных из внешних источников. CSV. ("Университет")

<Window x:Class="WpfApp3.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:WpfApp3"
        mc:Ignorable="d"
        Title="University" Height="450" Width="auto">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition />
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <!-- типа логотип компании -->
        <Image 
            Source="/img/student.jpg" 
            Grid.RowSpan="2"/>

        <StackPanel 
            Orientation="Vertical"
            Grid.RowSpan="3"
            VerticalAlignment="Bottom">
            <Button 
                x:Name="ExitButton"
                Content="Выход" 
                Click="ExitButton_Click"
                Height="50"/>
        </StackPanel>

        <WrapPanel
            Orientation="Horizontal"
            Grid.Column="1"
            MinHeight="50">
            <TextBox x:Name="NameFilter" Width="100" Margin="5" TextChanged="NameFilter_TextChanged" />
            <TextBox x:Name="NationFilter" Width="100" Margin="5" TextChanged="NationFilter_TextChanged" />
            <Button Content="Применить фильтр" Margin="5" />
        </WrapPanel>

        <DataGrid
            Grid.Row="1"
            Grid.Column="1"
            CanUserAddRows="False"
            AutoGenerateColumns="False"
            ItemsSource="{Binding StudentList}">
            <DataGrid.Columns>
                <DataGridTextColumn
                    Header="Номер"
                    Binding="{Binding Id}" />
                <DataGridTextColumn
                    Header="Имя"
                    Binding="{Binding Name}" />
                <DataGridTextColumn
                    Header="Возраст"
                    Binding="{Binding Age}" />
                <DataGridTextColumn
                    Header="Национальность"
                    Binding="{Binding Nation}" />
                <DataGridTextColumn
                    Header="Курс"
                    Binding="{Binding Course}" />
                <DataGridTextColumn
                    Header="Средний балл успеваемости"
                    Binding="{Binding GPA}" />
                <DataGridTextColumn
                    Header="Специальность"
                    Binding="{Binding Speciality}" />
                <DataGridTextColumn
                    Header="Стипендия"
                    Binding="{Binding Grant}" />
                <DataGridTextColumn
                    Header="Дата зачисления"
                    Binding="{Binding EnrollmentDate, StringFormat='dd.MM.yyyy'}" />
                <DataGridCheckBoxColumn
                    Header="Очное обучение"
                    Binding="{Binding IsFullTime}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace WpfApp3
{
    public partial class MainWindow : Window
    {
        public ObservableCollection<Student> StudentList { get; set; }
        private Dictionary<string, object> filters = new Dictionary<string, object>();

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
            Globals.dataProvider = new LocalDataProvider();
            StudentList = new ObservableCollection<Student>(Globals.dataProvider.GetStudents());
        }

        private void ExitButton_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void NameFilter_TextChanged(object sender, TextChangedEventArgs e)
        {
            filters["Name"] = ((TextBox)sender).Text;
            ApplyFilter();
        }

        private void NationFilter_TextChanged(object sender, TextChangedEventArgs e)
        {
            filters["Nation"] = ((TextBox)sender).Text;
            ApplyFilter();
        }

        private void ApplyFilter()
        {
            var filteredStudents = Globals.dataProvider.GetStudents();

            // Фильтрация по словарю
            foreach (var filter in filters)
            {
                filteredStudents = filteredStudents.Where(s => s.GetType().GetProperty(filter.Key).GetValue(s, null).ToString().Contains(filter.Value.ToString()));
            }

            // Фильтрация по условию
            filteredStudents = filteredStudents.Where(s => s.Age >= 20 && s.Course > 2);

            StudentList = new ObservableCollection<Student>(filteredStudents);
        }
    }

    internal interface IDataProvider
    {
        IEnumerable<Student> GetStudents();
    }

    public class LocalDataProvider : IDataProvider
    {
        public IEnumerable<Student> GetStudents()
        {
            return new List<Student>
            {
                new Student { Id = 1, Name = "Хэй Вэнь", Age = 24, Nation = "Китаец", GPA = 5.0, Speciality = "Программирование", Grant = 25000.0, Course = 4, EnrollmentDate = new DateTime(2020, 9, 1), IsFullTime = true },
                new Student { Id = 2, Name = "Семен Хомяк", Age = 22, Nation = "Русский", GPA = 3.7, Speciality = "Инженерия", Grant = 10000.0, Course = 2, EnrollmentDate = new DateTime(2022, 1, 15), IsFullTime = false },
                new Student { Id = 3, Name = "Джейкоб Ли", Age = 19, Nation = "Американец", GPA = 4.4, Speciality = "Лингвистика", Grant = 20000.0, Course = 1, EnrollmentDate = new DateTime(2023, 8, 20), IsFullTime = true },
            };
        }
    }

    public class Student
    {

        public int Id { get; set; }
        public string Name { get; set; }
        public string Speciality { get; set; }
        public string Nation { get; set; }
        public double GPA { get; set; }
        public double Grant { get; set; }
        public DateTime EnrollmentDate { get; set; }
        public bool IsFullTime { get; set; }
        public int Age { get; internal set; }
        public int Course { get; internal set; }
    }
}