Help us understand the problem. What is going on with this article?

DataGridViewとデータバインド

More than 3 years have passed since last update.

データバインドのやり方

DataGridViewとListをバインドし、DataGridViewの内容変更をListに反映する。
こうすることで、DataGridViewのイベント内でListを更新するコードを書く必要がなくなる。

バインドするクラスの作成

DataGridViewにバインドするクラスを作成する。
今回は、ToDoアプリを想定し、ToDoを管理するItemクラスを作成した。

Item.cs
    public class Item
    {
        public bool Done { get; set; }

        public string Name { get; set; }

        public string Detail { get; set; }
    }

ビルド

ここで一度ビルドする。
ItemクラスをVisualStudioに認識させる。

BindingSourceの作成

DataGridViewとItemクラスを関連付ける。
BidingSouceを作成することで、DataGridViewにItemクラスのプロパティが列に追加される。

  1. DataGridView コントロールの右上隅のスマート タグ グリフ (スマート タグ グリフ) をクリックします。
  2. [データ ソースの選択] オプションのドロップダウン矢印をクリックします。
  3. プロジェクトのデータ ソースがまだない場合は、[プロジェクト データ ソースの追加] をクリックし、ウィザードに示された手順に従います。

datasource.PNG

dataobject.PNG

※Itemクラスが表示されない場合、ビルドを忘れている。

datagridview2.PNG

Itemインスタンスの設定

BidingSouceのDataSourceにItemインスタンスを設定する。

Form1.cs
    public partial class Form1 : Form
    {
        private List<Item> _tasks;

        public Form1()
        {
            InitializeComponent();

            _tasks = new List<Item>();

            Item taskItem = new Item() { Done = true, Name = "a", Detail = "aaaaaaaaaa" };
            _tasks.Add(taskItem);

            itemBindingSource.DataSource = _tasks;
        }
    }

DataGridViewで行を追加すると、自動的に_tasksが更新されるようになった。

datagridview3.PNG

参考

lusf
Software Engineer, C#
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away