Загрузка данных



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public class TodoItem
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public bool IsCompleted { get; set; }
        public DateTime CreatedAt { get; set; }
    }

    public partial class Form1 : Form
    {
        private List<TodoItem> tasks = new List<TodoItem>();
        private BindingList<TodoItem> view;
        private int nextId = 1;

        private TextBox txtTitle;
        private Button btnAdd;
        private Button btnComplete;
        private Button btnDelete;
        private DataGridView dgvTasks;

        public Form1()
        {
            InitializeComponent();

            // Создаём элементы интерфейса программно
            txtTitle = new TextBox();
            txtTitle.SetBounds(10, 10, 250, 25);

            btnAdd = new Button();
            btnAdd.Text = "Добавить";
            btnAdd.SetBounds(270, 10, 100, 25);
            btnAdd.Click += BtnAdd_Click;

            btnComplete = new Button();
            btnComplete.Text = "Выполнено";
            btnComplete.SetBounds(380, 10, 100, 25);
            btnComplete.Click += BtnComplete_Click;

            btnDelete = new Button();
            btnDelete.Text = "Удалить";
            btnDelete.SetBounds(490, 10, 100, 25);
            btnDelete.Click += BtnDelete_Click;

            dgvTasks = new DataGridView();
            dgvTasks.SetBounds(10, 45, 650, 350);
            dgvTasks.AutoGenerateColumns = true;
            dgvTasks.ReadOnly = true;
            dgvTasks.SelectionMode =
                DataGridViewSelectionMode.FullRowSelect;
            dgvTasks.MultiSelect = false;
            dgvTasks.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.Fill;

            Controls.Add(txtTitle);
            Controls.Add(btnAdd);
            Controls.Add(btnComplete);
            Controls.Add(btnDelete);
            Controls.Add(dgvTasks);

            view = new BindingList<TodoItem>(tasks);
            dgvTasks.DataSource = view;

            Text = "Список дел";
            Width = 700;
            Height = 450;
            StartPosition = FormStartPosition.CenterScreen;
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            string title = txtTitle.Text.Trim();

            if (title.Length == 0)
            {
                MessageBox.Show("Введите название задачи.");
                return;
            }

            tasks.Add(new TodoItem
            {
                Id = nextId++,
                Title = title,
                IsCompleted = false,
                CreatedAt = DateTime.Now
            });

            RefreshTasks();
            txtTitle.Clear();
        }

        private TodoItem GetSelectedTask()
        {
            if (dgvTasks.CurrentRow == null)
                return null;

            return dgvTasks.CurrentRow.DataBoundItem as TodoItem;
        }

        private void BtnComplete_Click(object sender, EventArgs e)
        {
            TodoItem task = GetSelectedTask();

            if (task == null)
            {
                MessageBox.Show("Выберите задачу.");
                return;
            }

            task.IsCompleted = !task.IsCompleted;
            RefreshTasks();
        }

        private void BtnDelete_Click(object sender, EventArgs e)
        {
            TodoItem task = GetSelectedTask();

            if (task == null)
            {
                MessageBox.Show("Выберите задачу.");
                return;
            }

            tasks.Remove(task);
            RefreshTasks();
        }

        private void RefreshTasks()
        {
            int selectedId = -1;
            TodoItem selected = GetSelectedTask();

            if (selected != null)
                selectedId = selected.Id;

            view.ResetBindings();

            for (int i = 0; i < dgvTasks.Rows.Count; i++)
            {
                TodoItem item =
                    dgvTasks.Rows[i].DataBoundItem as TodoItem;

                if (item != null && item.Id == selectedId)
                {
                    dgvTasks.CurrentCell =
                        dgvTasks.Rows[i].Cells[0];
                    break;
                }
            }
        }
    }
}